QTreeWidget自带一个默认的排序函数:
sortItems(column, Qt::SortOrder);
column是,要排序的列,Qt::SortOrder是排序方式,有两种可选:
1、AscendingOrder:正序(升序);
2、DescendingOrder:倒序(降序);
但是这种默认的排序是跟column列的数据类型是有关的,举两个例子:
例子1:
for (int i = 0; i < 11; i++)
{
QTreeWidgetItem *pNode = new QTreeWidgetItem();
pNode->setText(0, QString::number(i + 1));
ui->treeWidget->addTopLevelItem(pNode);
}
ui->treeWidet->sortItems(0, Qt::SortOrder::AscendingOrder);
在treeWidget中添加11个根节点,以数字1-11分别对其命名,然后进行升序排序,排序完的结果由上而下为:1,10,11,2,3,4,5,6,7,8,9。
例子2:
for (int i = 0; i < 11; i++)
{
QTreeWidgetItem *pNode = new QTreeWidgetItem();
pNode->setData(0, Qt::DisplayRole, i + 1);
ui->treeWidget->addTopLevelItem(pNode);
}
ui->treeWidet->sortItems(0, Qt::SortOrder::AscendingOrder);
同样是添加11个根节点,以数字1-11分别对其命名,然后进行生序排序,这样排序完的结果,由上而下为:1,2,3,4,5,6,7,8,9,10,11。
通过对比可以知道,例子1中,对其命名时,用的字符串,而例子2中用的是数字。
所以,当在用字符串时,QTreeWidget排序时,会按照字符串的大小比较规则来进行排序,而当用数字时,则会使用数字的大小比较规则来进行排序。
当然还有一种方法可以实现自定义排序,那就是重载操作符,具体代码网上有很多,就不举例子了。