Я начал загрузку базы данных в потоке без графического интерфейса с помощью QtCuncurrent::run. В этом потоке без графического интерфейса мне нужно создать QStandardItemModel*, после чего я получил модель в графическом потоке с
model = modelWatcher.result();
по сигналу QFutureWatcher Finished(). Это работает довольно хорошо (пользовательский интерфейс построен успешно), но сигнал itemChanged() не испускается при изменении данных элемента (состояние флажка изменилось). Когда я создаю модель в потоке графического интерфейса, коллизий нет. Connect работает без ошибок утверждения:
bool ok = connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(onFolderStateChanged(QStandardItem*)), static_cast<Qt::ConnectionType>(Qt::UniqueConnection));
Q_ASSERT(ok);
Как я вижу в этом потоке (примеров кода нет, и я неправильно понял основная идея) Я не могу создать модель (часть Qt5Gui) в потоке, отличном от Gui. Но это работает для меня! Пользовательский интерфейс построен) Также я должен объявить отправленный тип с помощью:
qRegisterMetaType<QStandardItemModel*>("QStandardItemModel*");
И другие мои отправки, как:
qRegisterMetaType<QList<QTreeWidgetItem*> >("QList<QTreeWidgetItem*>");
работает хорошо (хотя это также часть Qt5Gui).
Я не знаюt understand how can I **get the model from nonGui thread with full functionality** like itemChanged signals?
It
что-то вроде emit mysignal(QStandardItemModel*);
? В таком случае, почему другие задачи работают нормально без каких-либо излучателей? включая сигналы currentChanged и т. д..