Я начал загрузку базы данных в не-GUI потоке с QtCuncurrent :: бежать. В этом nonGui нить я должен создать QStandardItemModel * и после этого я получил модель в GUI потоке сQStandardItemModel * от не-GUI поток не был `испускает itemChanged сигнала
model = modelWatcher.result();
на QFutureWatcher закончил сигнал(). Он работает довольно хорошо (пользовательский интерфейс построен успешно), но элемент itemChanged() не выделяется при изменении данных элемента (состояние флажка изменено). Когда я создаю модель в потоке графического интерфейса, конфликтов нет. Подключение работает без утверждают не удается:
bool ok = connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(onFolderStateChanged(QStandardItem*)), static_cast<Qt::ConnectionType>(Qt::UniqueConnection));
Q_ASSERT(ok);
Как я могу видеть в that thread (нет примеров кода, и я понял основную идею), я не могу создать модель (часть Qt5Gui) в nonGui потоке. Но это работает для меня! Ui устроится) Кроме того, я должен объявить отослано типа с:
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 сигналы и т. д..
Thx, но он не работает .. –
Может быть, мне нужно сделать model-> moveToThread (this-> thread()); или что-то другое.. ? Если я создам модель в потоке пользовательского интерфейса, мне нужно отправить все зависящие данные в поток GUI из рабочего потока, правильно ли это? –
В самом деле, если вы хотите, чтобы ваш слот будет выполняться в отдельном потоке, не GUI, нить подход рабочей Рекоммендуемый, как описано здесь http://doc.qt.io/qt-5/qthread.html – Scab