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

Updating a model based on view changes by the user?

本文关键字:更新 模型 视图 用户      更新时间:2023-10-16

我有一个由QTableView显示的QStandardItemModel

这是一个示例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    |
+------+------+

索引保持不变,因为用户已更改 view 而不是模型。但是,我希望模型(和索引)在用户在视图中重新列出列时进行更新。如何更改模型以使我得到以下内容?

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

假设model是类型QStandardItemModel*,并且实际上只有两个列,那么您应该可以简单地做...

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

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