У меня проблемы с реализацией рендеринга пользовательского виджета в 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.