Qt的 QTableWidget 和 QTreeWidget 对item的排序,一直都存在一个问题,例如有三个item,text分别为1、3、15,排序的结果必然为1、15、3,这样不是我们想要的结果,所以需要通过重载QTreeWidgetItem的 operator< 函数,改变排序比较的方式,达到我们想要的效果。
.h文件
<span style="font-family:Verdana;font-size:12px;">class CTreeWidgetItemEx : public QTreeWidgetItem
{
public:
explicit CTreeWidgetItemEx(QTreeWidgetItem * parent = 0, int type = QTreeWidgetItem::Type);
~CTreeWidgetItemEx();
bool operator<(const QTreeWidgetItem & other) const;
};</span>
.cpp文件
<span style="font-family:Verdana;font-size:12px;">CTreeWidgetItemEx::CTreeWidgetItemEx(QTreeWidgetItem * parent /*= 0*/, int type /*= QTreeWidgetItem::Type*/)
: QTreeWidgetItem(parent, type)
{
}
CTreeWidgetItemEx::~CTreeWidgetItemEx()
{
}
bool CTreeWidgetItemEx::operator<(const QTreeWidgetItem & other) const
{
unsigned int a = this->text(0).toUInt();
unsigned int b = other.text(0).toUInt();
return (a < b);
}</span>
本文介绍如何解决Qt中QTableWidget和QTreeWidget项排序问题,通过重写CTreeWidgetItemEx类的比较运算符,实现数字字符串按数值大小而非ASCII码顺序排序。


被折叠的 条评论
为什么被折叠?



