QTableWidget があり、ヘッダー列を介してデフォルトの並べ替え機能を使用していますが、QTableWidget の列の 1 つは整数型であり、QTableWidget のデフォルトの並べ替えにより、文字列のように並べ替えられています。 QTableWidget の並べ替え関数?
3 に答える
QTableWidgetItem をサブクラス化し、それの operator<() を再実装することができます。QTableWidget では、デフォルトの QTableWidgetItems の代わりにこのカスタム アイテムを使用します。このようなもの:
class Item: public QTableWidgetItem
{
public:
[..]
bool operator< (const QTableWidgetItem &other) const
{
// TODO: To be safe, check weather conversion to int is possible.
return (this->text().toInt() < other.text().toInt());
}
[..]
};
そしてあなたのテーブルウィジェットで:
[..]
QTableWidgetItem *newItem = new Item("1");
tableWidget->setItem(row, column, newItem);
[..]
よくわかりませんが、QTableWidget の並べ替え動作を変更する簡単な方法はないと思います。
QTableWidget は、デフォルト モデルを使用する QTableView の便利なクラスです。保証はありませんが、何をしようとしますか:
QTableWidget は、QTableView から model() メソッドを継承します。これで、ウィジェットのモデルを取得できるはずです。
QAbstractItemModel *model = yourTableWidget->model();
これは簡単な部分でした。QSortFilterProxyModel
メソッドをオーバーライドできるcustom が必要になりましたvirtual bool lessThan(const QModelIndex & left, const QModelIndex & right) const
。
そして最後に:
YourCustomFilterProxyModel *proxyModel = new YourCustomFilterProxyModel(this);
proxyModel->setSourceModel(model);
yourTableWidget->setModel(proxyModel);
これまでのところ、QTableWidget のデフォルト モデルを置き換えようとしたことがないという保証はありません。可能であれば、Qt のビューとモデルを調べる必要があります。最初は使いにくそうに見えますが、慣れるまでには時間がかかります。私見 QTableWidget は、Qt3 の古い遺物です。