Render QWidget in der paint () - Methode der QWidgetDelegate für eine QListView

ich habe Schwierigkeiten bei der Umsetzung von custom-widget-Darstellung in einer QListView.
Ich habe derzeit eine QListView anzeigen meine custom-Modell namens PlayQueue basierend auf QAbstractListModel.

Dies ist in Ordnung arbeiten mit einfachen text, aber jetzt würde ich mag, um die Anzeige einer benutzerdefinierten widget für jedes element.
Also habe ich eine Unterklasse QStyledItemDelegate zur Umsetzung der paint Methode wie diese:

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

Die Auswahl der hintergrund ist richtig gerendert, aber kein widget angezeigt wird. Ich habe versucht, mit einfachen QPainter Befehle wie in der Qt-Beispiele, und dies gut funktioniert:

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");
}

Also habe ich versucht einige änderungen wie:

  • Ändern QStyledItemDelegate zu QItemDelegate
  • Hinzufügen painter->save() und painter->restore() um rendering
  • Einstellung der widget-geometrie, die Größe

Aber ich bin ein bisschen stecken, nun, ich suchte eine Weile im internet, aber nicht finden können, jedes Beispiel, das tun, was ich will, Sie alle sprechen über das Bearbeiten-widget (das ist viel einfacher) oder custom-drawn control (vorgefertigte, wie progress bars).
Aber hier brauche ich wirklich ein custom-widget die ich erstellt habe, mit einigen layout, Etiketten & pixmaps.
Vielen Dank für Ihre Hilfe!

Verwende ich Qt 4.7.3 für GCC auf Ubuntu 11.04.

Schreibe einen Kommentar