Изменить свойство случайного элемента в QListWidget
У меня 5 QProgressBar
в QListWidget
(ui->listWidget
). Как я могу получить доступ к третьему QProgressBar
элемент и изменить его значение, напр. (progressBar->setValue(40)
)
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);
}
2 ответа
Следующий код получит третий элемент в списке и установит прогресс на 40%.
QProgressBar *bar = qobject_cast<QProgressBar*>(ui->listWidget->itemWidget(pList->item(2)));
if (bar)
bar->setValue(40);
qobject_cast
будет безопасно приводить QWidget к QProgressBar, только если виджет действительно является QProgressBar. Если вы уверены, что третий элемент является QProgressBar, вы можете пропустить тест if if(bar)
,
Для получения дополнительной информации смотрите документацию qt QListWidget и qobject_cast.
Создайте определение для QProgressBar(s) в заголовочном файле класса, затем вы можете подключить вещи к слоту setValue или получить прямой доступ к ним.
Кажется странным добавлять ProgressBars в QListWidgetItems... разве QHBoxLayout не будет более подходящим?