我有一台QTableWidget。我在对文件和文件夹进行排序时遇到问题。我尝试了以下方法:
ui.table->horizontalHeader()->sortIndicatorOrder();
ui.table->sortItems(columnNumber, Qt::AscendingOrder);假设我的第一列由文件和folders.How组成,我是否要确保,文件夹始终位于顶部,文件位于文件夹之后?
我需要为QTableWidget类实现某种类型的布尔运算符“<”吗?
提前感谢!
发布于 2018-04-27 00:19:26
您不应对文件和文件夹使用QTableWidget,因为文件和文件夹的数量未知。QTableWidget在处理大量条目时的性能很差。
你应该学习如何做Model/View programming,在链接中有一个关于如何处理文件的例子。
使用模型视图,您可以拥有一个从模型获取信息的视图。模型可以是(几乎)任意大的,视图并不关心,因为它只加载它正在查看的内容。这与一直加载所有内容的QTableWidget不同,它会导致性能问题。
现在,关于排序的问题,您应该使用QSortFilterProxyModel,您将它设置为视图的模型,并在QSortFilterProxyModel中设置一个源模型。代理作为视图和模型之间的中间人,可以在传递信息之前对其进行排序和过滤。这是在Qt中对表格进行排序的正确方法。
发布于 2018-04-27 00:57:20
可以,您可以重载<()运算符并实现排序逻辑。
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应该没问题。如果你注意到排序需要几秒钟,就该切换了。
https://stackoverflow.com/questions/50047673
复制相似问题