私は、受け入れられた回答がうまく動作していたのですが、Qt5.1ではそうではありません。 作業するためには、operator<
の定義は、qtablewidget.h
の仮想定義と一致しなければなりません。
さらに興味深いのは、数字のある商品を並べ替えることですが、通貨記号($
または€
など)で始まるか、%
で終わります。このクラスが数字のみを使用しなければならないこと
myTableWidget->setItem(row, col, new TableNumberItem("$0"));
注:
class TableNumberItem : public QTableWidgetItem
{
public:
TableNumberItem(const QString txt = QString("0"))
:QTableWidgetItem(txt)
{
}
bool operator <(const QTableWidgetItem &other) const
{
QString str1 = text();
QString str2 = other.text();
if (str1[0] == '$' || str1[0] == '€') {
str1.remove(0, 1);
str2.remove(0, 1); // we assume both items have the same format
}
if (str1[str1.length() - 1] == '%') {
str1.chop(1);
str2.chop(1); // this works for "N%" and for "N %" formatted strings
}
double f1 = str1.toDouble();
double f2 = str2.toDouble();
return str1.toDouble() < str2.toDouble();
}
};
あなたはこのようなものを使用して数値を含むアイテムを追加し、次に:ここ
は、更新されたコードです、文字列を正しくソートしません(受け入れられた答えの場合もそうです)。
完璧な回答!このコードは私のために優れていました。 – zeFree
ありがとう、これは動作します。新しいバージョンのQtでは、シグネチャが 'bool operator <(const QTableWidgetItem&other)const'に大幅に変更されました。 – iliis
' setData(Qt :: DisplayRole、num) 'がうまく動作しない場合は、 。 – Wesley