根据用户的视图更改更新模型?

时间:2016-06-17 01:57:34

标签: c++ qt

我有一个由QStandardItemModel显示的QTableView

这是一个示例QTableView

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

每个细胞的指数如下:

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

我允许用户重新排序QTableView中的列,如下所示:

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

索引保持不变,因为用户已更改视图而非模型。但是当用户重新排序视图中的列时,我希望模型(和索引)得到更新。如何更改模型以便获得以下内容?

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

1 个答案:

答案 0 :(得分:1)

假设model的类型为QStandardItemModel*且实际上只有两列,那么您应该可以简单地执行... {/ p>

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);
}

我不确定你为什么要那样做 - 似乎违反了模型/视图分离的想法。