0

でテーブル関連の作業を行っていますがQt C++、今日、 を設定した後に非常に疑わしいものを見つけましたsortEnabled(true)。列で並べ替えたかったのでQTableWidget、そのプロパティを に設定しましたtrue。論理的には私が望んでいたものを手に入れましたが、他の行に対応するモーダル ダイアログが開いているdouble clickことに気付きました。row of a table私はそのテーブルに入れましたQTableWidgetItem-s

 QTableWidgetItem* widgetItem = new QTableWidgetItem();
 widgetItem->setData(Qt::UserRole, it->id);

で行アイテムdouble click signalを抽出しQTableWidget::item(int aRow, int aCol)、カスタムの一意の ID を取得しています (一意の ID を割り当てた各行で)。

ポイントは、列ヘッダーをクリックして並べ替えた後、並べ替え前にその位置にあった行の ID を取得していることです。他の列でソートしたため、取得したIDは他の行に対応しています。

どうすればその問題から逃れることができますか?私は何か間違ったことをしましたか。または、いくつかのプロパティを true/false に設定するのを忘れましたか?

sortそれはテーブルの視覚的な側面にのみ影響すると思いますが、構造的な方法ではありません...

適切なIDが欲しいだけで、他には何もありません。

テーブル状況の短い例を次に示します。

ソート前:

===id=======category==
|   47   |     b     |
|   48   |     a     |
|   49   |     c     |
|   50   |     d     |
======================

bitem(1,1)をダブルクリックするcorrect QTableWidget*と andが返されますID = 47

今、カテゴリ ヘッダーをクリックして並べ替えています

並べ替え後:

===id=======category==
|   48   |     a     |
|   47   |     b     |
|   49   |     c     |
|   50   |     d     |
======================

aitem(1,1)をダブルクリックすると、 the old one QTableWidget*and ID = 47 AGAIN ! が返されます。47じゃなくて48にしたい…

誰でも私を助けることができますか?

4

1 に答える 1

1

正しいアイテムを取得できない理由はわかりませんがQTableWidget::itemDoubleClicked()、実際のアイテムを送信する信号を聞くだけでよいので、取得するために移動する必要はありません。

于 2012-11-02T17:11:32.330 に答える