我的任务是在 QStandardItemModel 中自定义排序项目。默认情况下,用于一系列行
text1
text11
text12
text100
text110
text120
text1110
函数QStandardItemModel::sort()
将其排序为
text1
text100
text11
text110
text1110
text12
text120
我希望那会是
text1
text11
text12
text100
text110
text120
text1110
为此,我int QString::compare(const QString &s) const
在分隔 compare.cpp
文件中重载了函数。
int QString::compare(const QString &s) const
{
QString strL = "";
strL.append(this);
QString strR = "";
strR.append(s);
QStringList list = strL.split(QRegExp("\\D+"),QString::SkipEmptyParts);
foreach (QString num, list) {
strL.replace(num, QString("%1").arg(num,10,'0'));
}
list = strR.split(QRegExp("\\D+"),QString::SkipEmptyParts);
foreach (QString num, list) {
strR.replace(num, QString("%1").arg(num,10,'0'));
}
return strL.localeAwareCompare(strR);
}
使用 in 运算符
virtual bool operator< ( const QStandardItem & other ) const
。
这样的功能compare
可以在单独的文件中重新定义,在*.pro中添加很简单,简单的应用程序就会找到它的实现。但是对于更困难的应用程序,这是不可能的。请告诉我为什么?
示例:代码