2017-02-19 32 views
0

У меня есть 5 QProgressBar s в QListWidget (ui->listWidget). Как я могу получить доступ к третьему элементу QProgressBar и изменить его значение ex. (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 if(bar).

Для получения дополнительной информации см. Документацию qt QListWidget и qobject_cast.

1

Создать определение для QProgressBar (ы) в файле заголовка класса, то вы можете подключить вещи к слоту SetValue, или доступ к ним непосредственно.

Кажется странным добавлять ProgressBars в QListWidgetItems ... не будет ли QHBoxLayout более подходящим?

+0

mainwindow.h QProgressBar * prog; MainWindows.cpp prog = новый QProgressBar (это); как ? Я попробовал ui-> listWidget-> item (0) -> setValue (100); но QProgressBar [0] недоступен –

 Смежные вопросы

  • Нет связанных вопросов^_^