按列对 QTableWidget 进行排序

Sorting QTableWidget by column

我有一个 QTableWidget,我想根据零列的值对这个 table 的组件进行排序,我使用了这段代码:

ui->tableParticle->sortByColumn(0,Qt::AscendingOrder);

但是没有给出好的结果,下图显示了我寻求解决方案但没有找到的问题,抱歉我不能把所有代码都放上去,因为它很长。 Image

默认情况下,QTableWidget 将列作为普通字符串进行排序。如果您搜索 "custom sorting in QTableWidget" 之类的问题,您会找到答案的解决方案,例如

  1. Custom sorting method of QTableView?

  2. Custom Sorting in QTableWidget

我也发现这个答案是由 SoloPilot 添加的,但我不知道如何用空格填充数字字符串以及何时添加行 (' '+numStr)[ -4:] :

答案

一种对我的情况有效的方法是

  1. 在填写 table 之前,关闭排序:

table.setSortingEnabled(False)

  1. 用空格填充数字字符串并使列中的所有字符串具有相同的长度:

('    '+numStr)[-4:]

  1. 填写table后,开启排序:

table.setSortingEnabled(True)

这解决了行排序问题和数字顺序问题。

我在 setItem 之前添加了它,它起作用了:

ui->table->horizontalHeader()->sortIndicatorOrder();