当删除上下文属性中的QLIST对象时,QT QML应用程序崩溃

Qt QML application crashes when QList objects in context property are deleted

本文关键字:QT QML 崩溃 应用程序 对象 QLIST 上下文 删除 属性      更新时间:2023-10-16

我的qml listView带有某些模型(是QList<QObject*>(,由上下文属性提供:

g->appEngine->rootContext()->setContextProperty("queueStatesModel", QVariant::fromValue(this->queueStates));

一切顺利,直到我试图清除ListView。我这样做:

qDeleteAll(this->queueStates);
this->queueStates.clear();

然后,我再次使用空Qlist设置上下文属性,这会导致应用程序崩溃。当我在不删除所有对象的情况下进行qdeleteall一切顺利进行时,listView清晰,应用程序不会崩溃,但我会丢失这些指示。

这有什么问题?

我找到了一些解决方案 - 不是很优雅而是工作。

QList::clear()之前,我将指针从该列表中的副本副本到另一个Qlist。然后我 clear()第一个列表并设置上下文属性。之后,我在第二列表中执行qDeleteAllclear()。或多或少类似:

this->queueStatesCache = this->queueStates;
this->queueStates.clear();
g->appEngine->rootContext()->setContextProperty("queueStatesModel", QVariant::fromValue(this->queueStates));
qDeleteAll(this->queueStatesCache);
this->queueStatesCache.clear();