首页 > 解决方案 > 为什么 QPersistentModelIndex 不能存储在 QStandardItemModel 的项目之一中?

问题描述

背景

在我的模型中,我必须保留一个项目的数据,即对另一个项目的引用。

的文档QPersistentModelIndex说:

AQPersistentModelIndex是一个模型索引,可以由应用程序存储,然后用于访问模型中的信息。

QStandardItemModel::setData接受QVariant作为一个值,它又可以从构造QPersistentModelIndex,所以我可以写这样的东西:

...
auto *model = new QStandardItemModel();
auto *referencedItem = new QStandardItem("Test");
auto *item = new QStandardItem();

model->appendRow(referencedItem);
item->setData(QPersistentModelIndex(referencedItem->index()), Qt::UserRole);

// the next line prints "Test"
qDebug() << item->data(Qt::UserRole).toPersistentModelIndex().data().toString();
...

代码编译并打印:

测试

对另一个主题的接受答案,例如存储有关视图中项目的持久信息以及如何使用 QCombobox 选择更新 QTableView 单元格?, 也建议使用QPersistentModelIndex.

问题

的文档QPersistentModelIndex还说:

注意:您不能将QStandardItemModel's存储QPersistentModelIndex在模型的某个项目中。

这是否意味着,QPersistentModelIndex在上面的代码中使用类似,即:

item->setData(QPersistentModelIndex(referencedItem->index()), Qt::UserRole);

是错误的,为什么不应该这样做?

标签: c++qtqt5qstandarditemmodel

解决方案


推荐阅读