Приложение Qt QML падает, когда объекты QList в свойстве контекста удаляются - PullRequest
0 голосов
/ 03 июля 2019

У меня есть QML ListView с некоторой моделью (QList<QObject*>), предоставляемой свойством контекста:

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

Все идет хорошо, пока я не пытаюсь очистить ListView. Я делаю это так:

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

и затем я снова устанавливаю свойство context с пустым QList, что вызывает сбой приложения. Когда я делаю то же самое, не удаляя все объекты с помощью qDelete, все идет хорошо, ListView ясен, приложение не падает, но объекты остаются, и я теряю указатели на них.

Что может быть не так с этим?

1 Ответ

0 голосов
/ 04 июля 2019

Я нашел какое-то решение - не очень элегантное, но работающее.

До 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...