2017-02-19 1 views
0

J'ai 5 QProgressBar s dans un QListWidget (ui->listWidget). Comment puis-je accéder au troisième élément QProgressBar et changer sa valeur ex. (progressBar->setValue(40))Modifier la propriété de l'élément aléatoire dans 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); 
} 

Répondre

1

Le code suivant obtiendra le troisième élément de la liste et définira la progression à 40%.

QProgressBar *bar = qobject_cast<QProgressBar*>(ui->listWidget->itemWidget(pList->item(2))); 
if (bar) 
    bar->setValue(40); 

qobject_cast seront en toute sécurité jeté Qwidget à QProgressBar, que si le widget est en effet un QProgressBar. Si vous êtes sûr que le troisième élément est un QProgressBar, vous pouvez omettre le test si if(bar).

Voir la documentation qt QListWidget et qobject_cast pour plus d'informations.

1

Créer la définition du QProgressBar (s) dans le fichier d'en-tête de classe, vous pouvez connecter les choses à la fente setValue ou y accéder directement.

Il semble étrange d'ajouter ProgressBars à QListWidgetItems ... QHBoxLayout ne serait-il pas plus approprié?

+0

mainwindow.h QProgressBar * prog; MainWindows.cpp prog = new QProgressBar (this); Comment ? J'ai essayé ui-> listWidget-> item (0) -> setValue (100); mais QProgressBar [0] n'est pas accessible –