Rendre QWidget dans paint() la méthode de QWidgetDelegate pour un QListView

je vais avoir des difficultés pour mettre en œuvre widget personnalisé rendu dans un QListView.
J'ai actuellement un QListView l'affichage de mon modèle personnalisé appelé PlayQueue basé sur QAbstractListModel.

Cela fonctionne bien avec un simple texte, mais maintenant je voudrais afficher un widget personnalisé pour chaque élément.
J'ai donc un sous-classé QStyledItemDelegate pour mettre en œuvre les paint méthode comme ceci:

void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
    if (option.state & QStyle::State_Selected)
        painter->fillRect(option.rect, option.palette.highlight());
    QWidget *widget = new QPushButton("bonjour");
    widget->render(painter);
}

La sélection de l'arrière-plan est bien rendu, mais pas de widget est affiché. J'ai essayé avec de simples QPainter des commandes comme dans les exemples de Qt, et cela fonctionne bien:

void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
    if (option.state & QStyle::State_Selected)
        painter->fillRect(option.rect, option.palette.highlight());
    if (option.state & QStyle::State_Selected)
        painter->setPen(option.palette.highlightedText().color());
    painter->setFont(QFont("Arial", 10));
    painter->drawText(option.rect, Qt::AlignCenter, "Custom drawing");
}

J'ai donc essayé quelques modifications comme:

  • Changer QStyledItemDelegate à QItemDelegate
  • Ajoutant painter->save() et painter->restore() autour de rendu
  • Paramètre le widget de la géométrie de la taille

Mais je suis un peu coincé maintenant, j'ai cherché un moment sur l'internet, mais ne peut pas trouver n'importe quel exemple de faire ce que je veux, ils parlent tous de l'édition de widget (qui est beaucoup plus facile) ou personnalisés tirés de contrôle (prédéfinis, comme les barres de progression).
Mais ici, j'ai vraiment besoin d'un widget personnalisé que j'ai créé, contenant peu de mise en page, labels & images.
Merci pour votre aide!

Je suis en utilisant Qt 4.7.3 pour GCC sous Ubuntu 11.04.

OriginalL'auteur Adrien Jarthon | 2011-06-23