首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QTableWidget进行排序

使用QTableWidget进行排序
EN

Stack Overflow用户
提问于 2018-04-27 00:14:33
回答 2查看 840关注 0票数 0

我有一台QTableWidget。我在对文件和文件夹进行排序时遇到问题。我尝试了以下方法:

代码语言:javascript
复制
ui.table->horizontalHeader()->sortIndicatorOrder();
ui.table->sortItems(columnNumber, Qt::AscendingOrder);

假设我的第一列由文件和folders.How组成,我是否要确保,文件夹始终位于顶部,文件位于文件夹之后?

我需要为QTableWidget类实现某种类型的布尔运算符“<”吗?

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-04-27 00:19:26

您不应对文件和文件夹使用QTableWidget,因为文件和文件夹的数量未知。QTableWidget在处理大量条目时的性能很差。

你应该学习如何做Model/View programming,在链接中有一个关于如何处理文件的例子。

使用模型视图,您可以拥有一个从模型获取信息的视图。模型可以是(几乎)任意大的,视图并不关心,因为它只加载它正在查看的内容。这与一直加载所有内容的QTableWidget不同,它会导致性能问题。

现在,关于排序的问题,您应该使用QSortFilterProxyModel,您将它设置为视图的模型,并在QSortFilterProxyModel中设置一个源模型。代理作为视图和模型之间的中间人,可以在传递信息之前对其进行排序和过滤。这是在Qt中对表格进行排序的正确方法。

票数 1
EN

Stack Overflow用户

发布于 2018-04-27 00:57:20

可以,您可以重载<()运算符并实现排序逻辑。

代码语言:javascript
复制
class CustomTableWidgetItem : public QTableWidgetItem
{

public:

    CustomTableWidgetItem(const QString txt = QString("0")) 
    :QTableWidgetItem(txt)
    {
        setTextAlignment( Qt::AlignCenter ); /* center the text */
    }

    bool operator <(const QTableWidgetItem& other) const
    {
        /* Implement logic here */
        /* e.g if(column == file) return true; */
        /* else return false; */
    }
};

然后使用new CustomTableWidgetItem而不是new QTableWidgetItem。请阅读我的other post,看看它是如何在小部件上完成的。

性能说明:如果你有很多行,使用模型视图方法,如果你只处理几行,QTableWidget应该没问题。如果你注意到排序需要几秒钟,就该切换了。

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

https://stackoverflow.com/questions/50047673

复制
相关文章

相似问题

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