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

时间:2019-07-03 11:11:55

标签: c++ qt qml

我有QML ListView,其上下文属性提供了某些模型(QList<QObject*>):

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

一切正常,直到我尝试清除ListView。我这样做是这样的:

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

,然后再次使用空QList设置context属性,这会导致应用程序崩溃。当我在不删除所有带有qDeleteAll的对象的情况下进行所有操作时,一切正常,ListView清晰可见,应用程序没有崩溃,但是对象仍然存在,并且我丢失了指向它们的指针。

这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

我找到了一些解决方案-不是很好,但是可以工作。

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