2017-02-19 24 views
0

我在QListWidgetui->listWidget)中有5 QProgressBar s。我如何訪問第三個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將安全投QWidget的到QProgressBar,只有當小部件的確是一個QProgressBar。如果您確定第三個元素是QProgressBar,則可以省略if test if(bar)

有關更多信息,請參閱qt文檔QListWidgetqobject_cast

1

創建的類的頭文件的QProgressBar(S)的定義,那麼你可以連接東西向的setValue插槽,或直接訪問它們。

將進度條添加到QListWidgetItems中似乎很奇怪... QHBoxLayout會不會更合適?

+0

mainwindow.h QProgressBar * prog; MainWindows.cpp prog = new QProgressBar(this);怎麼樣 ?我試過ui-> listWidget-> item(0) - > setValue(100);但QProgressBar [0]不可訪問 –