繁体   English   中英

使用QStandardItemModel委托在QTreeView中擦除文本

[英]Delegate erasing text in QTreeView using QStandardItemModel

我在将代理添加到QTreeView时遇到了一些困难。 我通过一个运行良好的模型添加了一些QStandardItems,但是当我添加委托时,将删除文本,并且仅显示图标。

这是我为我的代表使用的代码:

void SeqNavDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
       const QModelIndex &index) const
{
    if (index.column() == 0 && option.state & QStyle::State_Enabled)
    {
        const QIcon icon(QLatin1String(":/SeqNavMenu/images/green.png"));

        QRect iconRect(option.rect.right() - option.rect.height(),
                   option.rect.top(),
                   option.rect.height(),
                   option.rect.height());

        icon.paint(painter, iconRect, Qt::AlignRight);
    }
}

我想做的就是将两者结合起来,也就是说,有文本和复选框,在右边有我放置在委托中的图标。

也许有人可以在这里指出正确的方向?

干杯。

当您将一个委托分配给一个视图时,该视图会自行停止渲染项目(实际上是使用另一个委托(由您的委托代替)来渲染项目)。 因此,它将渲染委托给您。 然后,您将委托编程为仅绘制图标。 因此,您只能看到图标。
如果您还需要绘制一个复选框和一个文本,则需要您自己绘制它,或者在实现中的某个地方调用祖先方法paint 因此,如果您从QStyledItemDelegate调用继承了SeqNavDelegate

QStyledItemDelegate::paint(painter, option, index);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM