我在实现自定义窗口小部件渲染时遇到困难QListView.我目前有一个QListView显示我的自定义模型PlayQueue基于QAbstractListModel.
这对于简单的文本工作正常,但现在我想为每个元素显示一个自定义小部件.所以我将a子类化为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);
}
Run Code Online (Sandbox Code Playgroud)
正确呈现选择背景但不显示小部件.我尝试使用QPainterQt示例中的简单命令,这很好用:
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");
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试了一些改变:
QStyledItemDelegate到QItemDelegatepainter->save()和 …