gpt4 book ai didi

c++ - QTreeView、QItemDelegate 和刷新其他项目?

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:05 25 4
gpt4 key购买 nike

我有一个 QTreeView 和它的 QItemDelegateQTreeView 有很多项。

目标:

如果我选择这些项目中的一个,那么不仅选择的项目而且其他一些(在我的其他条件之后)项目也必须重新绘制(例如,其他颜色)。

问题:

如果我在 QTreeView 中选择一个项目,则所选项目和其他项目将通过我的 QItemDelegate 在内部重新绘制。到目前为止是好的。但是在我选择其他窗口并再次选择此 QTreeView 之前,这些其他项目的更改是不可见的。

所以..我测试了以下功能..

repaint(), update(), etc...

但它并没有做出任何改变。

只有当我选择任何其他窗口并再次选择 QTreeView 小部件时,我才能看到更改..

如何刷新 QTreeView 并使 QItemDelegate 的更改可见?

最佳答案

我在 QTreeWidget 子类中的做法是这样的:

void MyTreeWidgetSubclass :: ForceUpdateItem(QTreeWidgetItem * li)
{
int lastIndex = columnCount()-1;
QRect firstColCellRect = visualRect(indexFromItem(li, _headerView->logicalIndex(0)));
QRect lastColCellRect = visualRect(indexFromItem(li, _headerView->logicalIndex(lastIndex))));
viewport()->update(firstColCellRect | lastColCellRect);
}

很明显,如果你直接使用 QTreeView 类而不是 QTreeWidget 子类,你需要稍微修改一下,但原理是一样的:QTreeView 类仍然有 visualRect() 方法来给你 on -给定 QModelIndex 的屏幕位置,因此您可以使用它来计算表示要更新的一个或多个索引的视觉位置的 QRect,然后使用该 QRect 作为参数调用 viewport()->update()。

关于c++ - QTreeView、QItemDelegate 和刷新其他项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com