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 :
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();
}