2016-06-17 6 views
0

QStandardItemModelQTableViewで表示されています。ここユーザーによるビューの変更に基づいてモデルを更新しますか?

サンプルQTableViewだ:

+------+------+ 
| Col1 | Col2 | 
+------+------+ 
| A | B | 
| C | D | 
+------+------+ 

次のように各セルのインデックスは次のとおり

[0,0]: A 
[0,1]: B 
[1,0]: C 
[1,1]: D 

Iは、ユーザがそうようQTableViewで列の順序を変更することを可能にする:

+------+------+ 
| Col2 | Col1 | 
+------+------+ 
| B | A | 
| D | C | 
+------+------+ 

ユーザーがtを変更したため、インデックスは同じままです。彼ビューであり、モデルではありません。しかし、ユーザーがビューの列を並べ替えると、モデル(およびインデックス)が更新されるようにします。次のようにモデルを変更するにはどうすればよいですか?

modelはタイプ QStandardItemModel*のものであり、実際には2つだけの列があり、あなたは、単に行うことができるはずと仮定すると、
[0,0]: B 
[0,1]: A 
[1,0]: D 
[1,1]: C 

答えて

1

...

QStandardItem *root = model->invisibleRootItem(); 
for (int row = 0; row < root->rowCount(); ++row) { 
    QStandardItem *left = root->child(row, 0); 
    QStandardItem *right = root->child(row, 1); 
    QMap<int, QVariant> data = model->itemData(left->index()); 
    model->setItemData(left->index(), model->itemData(right->index())); 
    model->setItemData(right->index(), data); 
} 

私はあなたがいることをしたいと思う理由はわかりませんモデル - ビュー分離のアイデアに違反しているようだ。

+0

2つ以上の列があります。この質問は私が答えることができなかったものの単純なバージョンです:http://stackoverflow.com/questions/37802081/copying-a-selection-in-a-qtableview-properly-model-index-issues – orbit

+0

それは* *非常に**別の質問です。 –

+0

それは複雑です、はい。しかし、余分なインデックスセットを持つことで、モデルインデックスではなくビジュアルインデックスから選択範囲を外すことができます。これにより、選択範囲が意図したとおりに動作します(上から下の行ではなく左から右)。 – orbit

関連する問題