私の仕事は、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 operator を使用すること
virtual bool operator< ( const QStandardItem & other ) const
。
このような機能compare
は、別のファイルで再定義でき、*.pro に簡単に追加でき、簡単なアプリケーションでその実現を見つけることができます。しかし、より難しいアプリケーションでは、そのような方法は不可能です。どうしてか言ってくれない?
例:コード