使用QStandardItemModel委派在QTreeView中删除文本

时间:2014-08-21 12:49:09

标签: c++ qt qtreeview qstandarditemmodel qstyleditemdelegate

我在向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);
    }
}

我想要做的是将两者结合起来,也就是说,将文本和复选框合并在一起,并在右侧具有我在代表中放置的图标。

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

干杯。

1 个答案:

答案 0 :(得分:1)

当您将一个委托分配给一个视图时,该视图会自动停止呈现项目(实际上它是由另一个由您自己替换的委托来完成的)。所以它将渲染委托给你。而且你为代表编程只绘制图标。这就是为什么你只看到图标 如果你需要绘制一个复选框和一个文本,你需要自己绘制它或在你的实现中的某个地方调用祖先方法paint。因此,如果您从SeqNavDelegate调用继承QStyledItemDelegate

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