小编Adr*_*hon的帖子

在QWidgetDelegate的paint()方法中为QListView渲染QWidget

我在实现自定义窗口小部件渲染时遇到困难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)

所以我尝试了一些改变:

  • 更改QStyledItemDelegateQItemDelegate
  • 添加painter->save()和 …

qt qwidget qpainter qlistview qstyleditemdelegate

12
推荐指数
2
解决办法
1万
查看次数

标签 统计

qlistview ×1

qpainter ×1

qstyleditemdelegate ×1

qt ×1

qwidget ×1