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 :
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 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);
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.
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); }
Sauriez-vous ce que je fais mal et comment je pourrai faire apparaitre mon widget dans la cellule de mon tableau ?
Merci d'avance.
Partager