Изменить свойство случайного элемента в 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 не будет более подходящим?

Другие вопросы по тегам