Bonjour à tous,

J'aurai besoin de personnaliser un QTableView en utilisant un widget créé moi-même (contenant 4 QLabel mise en forme) dans une colonne.

J'initialise donc un Delegate pour mon tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
        m_ui.setupUi(this);
 
        m_model = new QPluginsTableModel(fmk);
 
        m_ui.pluginTableView->setModel(m_model);
 
        QPluginItemDelegate *pWidget = new QPluginItemDelegate(this);
        m_ui.pluginTableView->setItemDelegateForColumn(0, pWidget);
Et dans mon Delegate, je redéfinie la fonction paint pour pouvoir dessiner mon widget. Je le fait de la manière suivante mais je pense que je me trompe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    QPluginItemDelegate::QPluginItemDelegate(QObject *parent)
        :QStyledItemDelegate (parent)
    {
        cout << "QPluginItemDelegate::QPluginItemDelegate" << endl;
    }
 
    QPluginItemDelegate::~QPluginItemDelegate()
    {
        cout << "QPluginItemDelegate::~QPluginItemDelegate" << endl;
    }
 
    void QPluginItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                               const QModelIndex &index) const
    {
        cout << "QPluginItemDelegate::paint " << index.column() << endl;
 
        if (index.column() == 0) {
 
            QVariant variant = index.data(Qt::UserRole);
            QHash<QString, QString> headers = variant.value<QHash<QString, QString> >();
            QPluginItemWidget item(headers); //le cout du CTor s'affiche correctement
 
 
            QStyleOptionComplex complex;
            complex.init(&item);
            complex.rect = option.rect;
 
            complex.state = QStyle::State_Enabled;
            complex.direction = QApplication::layoutDirection();
            complex.rect = option.rect;
            complex.fontMetrics = QApplication::fontMetrics();
 
            cout << "QPluginItemDelegate::paint " << headers.value("Name").toStdString() << endl;
 
            QApplication::style()->drawControl(QStyle::CE_CustomBase,
                                               &complex, painter);
 
        } else
            QStyledItemDelegate::paint(painter, option, index);
    }
Mais à l'éxecution, la case de mon tableau apparait vide. Je pense que le problème vient de l'utilisation de QStyleOptionComplex car quand j'utilise un QStyleOptionProgressBar comme dans "l'exemple Qt" le progressBar apparait correctement.

Sauriez-vous ce que je fais mal et comment je pourrai faire apparaitre mon widget dans la cellule de mon tableau ?

Merci d'avance.