Utilisation d'un widget pour personnaliser un QTableView
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:
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:
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. :arf: