Отрисовка QWidget в методе paint () QWidgetDelegate для QListView

У меня проблемы с реализацией рендеринга пользовательского виджета в QListView . В настоящее время у меня есть QListView , отображающий мою пользовательскую модель под названием PlayQueue на основе QAbstractListModel .

Это нормально работает с простым текстом, но теперь я хотел бы отображать собственный виджет для каждого элемента. Поэтому я создал подкласс QStyledItemDelegate , чтобы реализовать метод paint следующим образом:

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

Фон выделения отображается правильно, но виджет не отображается. Я пробовал с простыми командами QPainter , как в примерах Qt, и это работает нормально:

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

Поэтому я попробовал некоторые изменения, например:

  • Изменение QStyledItemDelegate на QItemDelegate
  • Добавление painter-> save () и painter-> restore () вокруг рендеринга
  • Установка доступного размера геометрии виджета

Но я немного застрял, я какое-то время искал в Интернете, но не могу найти ни одного примера, делающего то, что я хочу, все они говорят о редактировании виджета (что намного проще) или настраиваемом рисованном элементе управления (предопределенные, например, индикаторы выполнения). Но здесь мне действительно нужен пользовательский виджет, который я создал, содержащий макет, метки и изображения. Спасибо за вашу помощь!

Я использую Qt 4.7.3 для GCC в Ubuntu 11.04.

12
задан RAM 27 April 2018 в 11:25
поделиться