3

QTableWidget があり、ヘッダー列を介してデフォルトの並べ替え機能を使用していますが、QTableWidget の列の 1 つは整数型であり、QTableWidget のデフォルトの並べ替えにより、文字列のように並べ替えられています。 QTableWidget の並べ替え関数?

4

3 に答える 3

4

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);
[..]
于 2013-09-06T07:17:32.013 に答える
0

よくわかりませんが、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 の古い遺物です。

于 2013-09-06T01:31:52.447 に答える