首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTreeView,QItemDelegate &刷新其他项目?

QTreeView,QItemDelegate &刷新其他项目?
EN

Stack Overflow用户
提问于 2015-05-19 15:18:04
回答 1查看 776关注 0票数 1

我有一个QTreeViewQItemDelegate。而且QTreeView有许多项目。

目标是:

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

问题是:

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

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

重新油漆()、更新()等.

但它不会有任何改变。

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-05-19 18:19:43

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

代码语言:javascript
复制
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()方法来为您提供给定QModelIndex的屏幕上位置,因此您可以使用该方法计算表示您想要更新的索引或索引的可视位置的QRect,然后使用QRect作为参数调用viewport()->update()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30329656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档