我在覆盖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参数所做的更改。
根据委托的类型,我还会尝试重写该setEditorData()方法甚至createEditor()(您可以在其中添加与模型不同的值)。与在油漆中进行此类操作相比,耗时更少。
否则,您可以使用类似的方法在您想要的位置绘制文本:
painter->drawText(option.rect, Qt::AlignJustify, text + "_test");
Run Code Online (Sandbox Code Playgroud)
您可能有这样做的理由,但如果您想动态添加额外的文本,您的设计似乎出了问题?
| 归档时间: |
|
| 查看次数: |
3322 次 |
| 最近记录: |