27Fermer29
geogeoLe 11/07/2008 à 02:22
Bon après plusieurs triturage du code de kwidgetitemdelegate j'ai abandonné cette voie. Ca marche mal et le code ressemble à une usine à gaz.

J'ai donc persévéré avec le composant QListWidget et j'ai enfin réussi à faire ce que je voulais sans rediriger les événements...
Voilà le résultat :
QListWidgetTest.png


Et le code source tout bête :
class MyProgressBar : public QProgressBar
{
  public:
    MyProgressBar(QWidget* parent = 0)
       : QProgressBar(parent)
    {
      this->startTimer(500);
    }

    void timerEvent(QTimerEvent *event) {
      setValue(value() + 1);
    }
};

int main(int argc, char **argv)
{
    QApplication a(argc, argv);

    QListWidget listView;
    listView.resize(400, 300);

    for (int i = 0; i < 5; i++)
    {
        QListWidgetItem *item = new QListWidgetItem("", &listView);
        item->setSizeHint(QSize(200,40));

        listView.addItem(item);

        QWidget* w = new QWidget();
        QLabel* l = new QLabel("Label", w);
        MyProgressBar* p = new MyProgressBar(w);
        p->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

        QPushButton* b = new QPushButton("Cliquez-moi !", w);
        QObject::connect(b, SIGNAL(clicked()), qApp, SLOT(aboutQt()));

        QHBoxLayout* hlayout = new QHBoxLayout();
        hlayout->setMargin(10);
        hlayout->addWidget(l);
        hlayout->addWidget(p);
        hlayout->addWidget(b);

        w->setLayout(hlayout);

        listView.setItemWidget(item, w);
    }

    QPushButton* b = new QPushButton("Quitter");
    b->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
    QObject::connect(b, SIGNAL(clicked()), qApp, SLOT(quit()));

    QListWidgetItem *item = new QListWidgetItem("", &listView);
    item->setSizeHint(QSize(200,100));
    listView.addItem(item);
    listView.setItemWidget(item, b);


    listView.show();

    return a.exec();
}