为 QTreeView 覆盖 QStyledItemDelegate 中的文本

Jon*_*onF 5 c++ qt

我在覆盖QTreeView使用QStyledItemDelegate. 当满足某些条件时,执行以下代码:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  .
  .

        QStyleOptionViewItemV4 opt = option;
        initStyleOption(&opt, index);
        QString text = opt.text;
        text = text + QString("TEST");
        opt.text = text;

        QStyledItemDelegate::paint(painter, opt, index);
}
Run Code Online (Sandbox Code Playgroud)

我在调试器中确认TEST已添加到opt.text.
但是,当我运行我的程序并查看TreeVuew它时,它仍然显示没有附加TEST 的原始文本string

似乎当我调用 时QStyledItemDelegate::paint(painter, opt, index),它忽略了我对opt参数所做的更改。

Jon*_*Jon 0

根据委托的类型,我还会尝试重写该setEditorData()方法甚至createEditor()(您可以在其中添加与模型不同的值)。与在油漆中进行此类操作相比,耗时更少。

否则,您可以使用类似的方法在您想要的位置绘制文本:

painter->drawText(option.rect, Qt::AlignJustify, text + "_test");
Run Code Online (Sandbox Code Playgroud)

您可能有这样做的理由,但如果您想动态添加额外的文本,您的设计似乎出了问题?