我在向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);
}
}
我想要做的是将两者结合起来,也就是说,将文本和复选框合并在一起,并在右侧具有我在代表中放置的图标。
也许有人可以在这里指出我正确的方向?
干杯。
答案 0 :(得分:1)
当您将一个委托分配给一个视图时,该视图会自动停止呈现项目(实际上它是由另一个由您自己替换的委托来完成的)。所以它将渲染委托给你。而且你为代表编程只绘制图标。这就是为什么你只看到图标
如果你需要绘制一个复选框和一个文本,你需要自己绘制它或在你的实现中的某个地方调用祖先方法paint
。因此,如果您从SeqNavDelegate
调用继承QStyledItemDelegate
:
QStyledItemDelegate::paint(painter, option, index);