Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么QPersistentModelIndex不能存储在QStandardItemModel';什么东西? 背景_C++_Qt_Qt5_Qstandarditemmodel - Fatal编程技术网

C++ 为什么QPersistentModelIndex不能存储在QStandardItemModel';什么东西? 背景

C++ 为什么QPersistentModelIndex不能存储在QStandardItemModel';什么东西? 背景,c++,qt,qt5,qstandarditemmodel,C++,Qt,Qt5,Qstandarditemmodel,在我的模型中,我必须在一个项目的数据中保留对另一个项目的引用 文件说明: QPersistentModelIndex是一个模型索引,可由应用程序存储,稍后用于访问模型中的信息 接受QVariant作为一个值,该值可以是,因此我可以编写如下内容: ... auto *model = new QStandardItemModel(); auto *referencedItem = new QStandardItem("Test"); auto *item = new QStand

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

文件说明:

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

接受
QVariant
作为一个值,该值可以是,因此我可以编写如下内容:

...
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();
...

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

我猜这与删除行和尝试更新正在删除的行中的内容有关。好的,但这会如何影响存储在数据中的持久索引?毕竟,它可能是任何
QVariant
。这有什么关系呢?区别在于,普通的QVariants没有一种特殊的更新机制,这种机制在内部与Qt处理模型行删除的方式相联系。每个QPersistentModelIndex的内存地址都必须在某处维护,并在行删除过程中调用以更新其行号。因此,如果在意外的时间将其删除,可能会导致崩溃。再说一次,我只是在猜测。评论完全有可能已经过时了。检查来源。@PatrickParker,我已尝试在模型中移动项目并从模型中删除项目。它还没有崩溃,索引已经正确更新。所以,我正在进一步寻找一个可能的原因。您是否尝试同时删除包含自引用持久模型索引的多行范围?如果这样做有效的话,我也会被难倒。我还没有深入了解源代码。我猜这与删除行以及尝试更新那些被删除行中的内容有关。好的,但这会如何影响存储在数据中的持久索引?毕竟,它可能是任何
QVariant
。这有什么关系呢?区别在于,普通的QVariants没有一种特殊的更新机制,这种机制在内部与Qt处理模型行删除的方式相联系。每个QPersistentModelIndex的内存地址都必须在某处维护,并在行删除过程中调用以更新其行号。因此,如果在意外的时间将其删除,可能会导致崩溃。再说一次,我只是在猜测。评论完全有可能已经过时了。检查来源。@PatrickParker,我已尝试在模型中移动项目并从模型中删除项目。它还没有崩溃,索引已经正确更新。所以,我正在进一步寻找一个可能的原因。您是否尝试同时删除包含自引用持久模型索引的多行范围?如果这样做有效的话,我也会被难倒。我还没有深入了解来源。
item->setData(QPersistentModelIndex(referencedItem->index()), Qt::UserRole);