2013-07-11 104 views
0

我有一个QTableWidget,第一列填充了可选项目,所以我需要重载这些项目才能对它们进行排序。排序按预期工作时,我点击该列的标题(行排序 - 首先有检查行,然后不检查)。调用setSortingEnabled(1)时发生意外的行为

,当我跑我的GUI,不上任何列的标题点击排序表,然后做到这一点,会出现问题:

tableWidget.setSortingEnabled(0); 
// check/uncheck some checkable items here 
tableWidget.setSortingEnabled(1); 

在这种情况下覆盖__lt__被称为100+次,但我不期望,因为我没有点击该列的标题进行排序。那么,为什么__lt__被调用?为什么它比较了一些可检查的项目,即使我没有点击该列的标题来对它们进行排序?

请帮我,打电话__lt__当我有30多行时,会消耗太多的时间。

回答

5

从文档(C++ QT而是适用):

sortingEnabled:布尔

这个属性保存是否排序被启用。

如果此属性为true,则为表启用排序。如果此 属性为false,则不启用排序。默认值是false。

注意: 使用setSortingEnabled() 将属性设置为true,将立即触发对sortByColumn()的调用,并使用当前的排序 部分和顺序。

如果你检查QHeaderView的文档(这是由小部件查询了解列进行排序),你可以阅读:

INT QHeaderView :: sortIndicatorSection()const的

返回具有排序指示符的节的逻辑索引。通过 默认这是部分0

另请参见setSortIndicator(),sortIndicatorOrder()和 setSortIndicatorShown()。

和:

的Qt :: SortOrder的QHeaderView :: sortIndicatorOrder()const的

返回排序指标的顺序。如果没有章节有排序 指示器此函数的返回值是undefined

所以,你应该谨慎使用该

+0

谢谢您的回答。首先,我已经在'setSortingEnable(1)'之前和之后尝试过'sortIndicatorSection()',两个结果都是“7”。我有7列(0-6),所以我猜想,默认的排序部分不是0,但列表的表格(在我的情况下,第7节)尽管排序行为像它是0.也许这是因为我有tableWidget而不是tableView ? – Aleksandar

+1

无论如何,你的回答指向我正确的方向,我发现这个:void QHeaderView :: setSortIndicator(int logicalIndex,Qt :: SortOrder order)' - _“logicalIndex可能是-1,在这种情况下,没有排序指示器被显示,模型将返回到它自然的,未排序的顺序。“_。 这也适用于tableWidget,在tableWidget填充之前放置该行解决了我的问题。 – Aleksandar

+0

QTableWidget继承自QTableView。但在内部处理模型。奇怪的是7回来了。很高兴帮助反正:) – Trompa

相关问题