我有QML ListView,其上下文属性提供了某些模型(QList<QObject*>
):
g->appEngine->rootContext()->setContextProperty("queueStatesModel", QVariant::fromValue(this->queueStates));
一切正常,直到我尝试清除ListView。我这样做是这样的:
qDeleteAll(this->queueStates);
this->queueStates.clear();
,然后再次使用空QList设置context属性,这会导致应用程序崩溃。当我在不删除所有带有qDeleteAll的对象的情况下进行所有操作时,一切正常,ListView清晰可见,应用程序没有崩溃,但是对象仍然存在,并且我丢失了指向它们的指针。
这可能是什么问题?
答案 0 :(得分:0)
我找到了一些解决方案-不是很好,但是可以工作。
在QList::clear()
之前,我将指针从该列表复制到另一个QList。然后,我clear()
首先列出并设置上下文属性。之后,我在第二个列表中执行qDeleteAll
和clear()
。或多或少像这样:
this->queueStatesCache = this->queueStates;
this->queueStates.clear();
g->appEngine->rootContext()->setContextProperty("queueStatesModel", QVariant::fromValue(this->queueStates));
qDeleteAll(this->queueStatesCache);
this->queueStatesCache.clear();