Я публикую пример того, что упомянул в комментариях:
В этом примере запускается таймер, который каждую секунду отправляет сообщение отладки в рабочий поток, пока пользовательский интерфейс не поврежден.
Предположим, у вас есть класс worker.h:
#include <QObject>
#include <QDebug>
#include <QTimer>
class Worker : public QObject {
Q_OBJECT
public:
explicit Worker(QObject* parent = nullptr): QObject(parent){
timer.setInterval(1000);
connect(&timer, &QTimer::timeout, [=]() {
qDebug() << "executing with wait";
});
}
~Worker(){}
Q_INVOKABLE void doSomeWork() { // modify this to accommodate your params
//do something here
timer.start();
}
private:
QTimer timer;
};
Это определяется в main.cpp как:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "worker.h"
#include <QThread>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
Worker cpp;
QThread cpp_thread;
cpp.moveToThread(&cpp_thread);
cpp_thread.start();
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("cpp", &cpp);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
В какой-то момент вашего QML вы вызываетеэто как:
WorkerScript.onMessage = function(obj1,obj2) {
cpp.doSomeWork() // modify this to accommodate your params
}
Надеюсь, это поможет.