【问题标题】:Unexpected behaviour when setSortingEnabled(1) is called调用 setSortingEnabled(1) 时的意外行为
【发布时间】:2013-07-11 10:14:30
【问题描述】:

我有一个QTableWidget,第一列填充了可检查的项目,所以我需要重载这些项目才能对它们进行排序。当我单击该列的标题时,排序按预期工作(行已排序 - 首先有选中的行,然后没有选中)。

当我运行我的 GUI 并且不单击任何列的标题对表进行排序然后执行此操作时,就会出现问题:

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

在这种情况下,覆盖 __lt__ 被调用了 100 多次,但我没想到会这样,因为我没有单击该列的标题进行排序。那么,为什么会调用 __lt__ 呢?为什么即使我没有单击该列的标题对它们进行排序,它也会比较一些可检查的项目?

请帮帮我,当我有 30 多行时,调用 __lt__ 会消耗太多时间。

【问题讨论】:

    标签: python qt pyqt qtablewidget


    【解决方案1】:

    来自文档(C++ qt 但适用):

    sortingEnabled : bool

    此属性保存是否启用排序。

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

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

    如果您查看 QHeaderView 的文档(由小部件查询以了解要排序的列),您可以阅读:

    int QHeaderView::sortIndicatorSection () const

    返回具有排序指示符的节的逻辑索引。经过 默认为 第 0 节

    另请参见 setSortIndicator()、sortIndicatorOrder() 和 setSortIndicatorShown().

    还有:

    Qt::SortOrder QHeaderView::sortIndicatorOrder () 常量

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

    所以你应该小心这个

    【讨论】:

    • 感谢您的回答。首先,我已经在setSortingEnable(1) 之前和之后尝试过sortIndicatorSection(),两个结果都是“7”。我有 7 列(0-6),所以我猜默认排序部分不是 0,而是表外的列(在我的情况下是第 7 部分),尽管排序的行为就像它是 0。也许那是因为我有 tableWidget 而不是 tableView ?
    • 无论如何,您的回答为我指明了正确的方向,我发现了这一点:void QHeaderView::setSortIndicator(int logicalIndex, Qt::SortOrder order) - "logicalIndex 可能为 -1,在这种情况下,不会显示排序指示符和模型将恢复到其自然的、未排序的顺序。” .这也适用于 tableWidget,在填充 tableWidget 之前放置该行解决了我的问题。
    • QTableWidget 继承自 QTableView。但在内部处理模型。奇怪的是 7 回来了。无论如何都很乐意提供帮助:)
    • 我还有一个相关的问题,所以如果您有任何想法,请提出建议:我有这个self.connect(self.tableWidget,SIGNAL("cellChanged(int, int)"), self.DoSomething),所以当我选中/取消选中项目DoSomething 时,我会在禁用排序的地方调用,做一些计算,然后再次启用排序。每次勾选或取消勾选任何一项,setSortingEnabled(1) 都会消耗越来越多的时间,我不知道如何跟进正在发生的事情。 (例如 0.031999 0.041 0.04799 0.05299 .....)
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多