2017-02-19 14 views
0

나는 QListWidget (ui->listWidget)에 5 QProgressBar을 가지고 있습니다. 세 번째 QProgressBar 요소에 액세스하고 값을 변경하려면 어떻게해야합니까? (progressBar->setValue(40))QListWidget에서 무작위 요소의 속성 변경

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    a = new QPushButton(this); 

    connect(a, SIGNAL (clicked()),this, SLOT (clickedSlot())); 
} 

void MainWindow::clickedSlot() 
{ 
    QProgressBar *prog = new QProgressBar(this); 

    QListWidgetItem *it; 

    it = new QListWidgetItem(ui->listWidget); 
    ui->listWidget->insertItem(ui->listWidget->size().height(),it); 
    it->setSizeHint(QSize(200,50)); 

    ui->listWidget->setItemWidget(it, prog); 
} 

답변

1

다음 코드는 목록의 세 번째 요소를 가져 와서 진행률을 40 %로 설정합니다.

QProgressBar *bar = qobject_cast<QProgressBar*>(ui->listWidget->itemWidget(pList->item(2))); 
if (bar) 
    bar->setValue(40); 

qobject_cast 안전하게 위젯이 참으로 QProgressBar 경우에만, QProgressBar로는 QWidget 캐스팅됩니다. 세 번째 요소가 QProgressBar라고 확신하는 경우 if 테스트 if(bar)을 생략 할 수 있습니다.

자세한 내용은 qt 설명서 QListWidgetqobject_cast을 참조하십시오.

1

는 당신이 setValue의 슬롯에 물건을 연결할 수있는 클래스 헤더 파일에 QProgressBar (들)에 대한 정의를 만들거나 직접 액세스 할 수 있습니다.

QListWidgetItems에 ProgressBars를 추가하는 것이 이상한 것 같습니다. QHBoxLayout이 더 적합하지 않습니까?

+0

mainwindow.h QProgressBar * prog; MainWindows.cpp prog = 새로운 QProgressBar (this); 어떻게? 나는 ui-> listWidget-> item (0) -> setValue (100);을 시도했다. 하지만 QProgressBar [0]은 액세스 할 수 없습니다. –