2017-02-19 27 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]不可访问 –