我有一个由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
答案 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);
}
我不确定你为什么要那样做 - 似乎违反了模型/视图分离的想法。