来自其他 QThread 的 Q_PROPERTY 将变量发送到 QML
Posted
技术标签:
【中文标题】来自其他 QThread 的 Q_PROPERTY 将变量发送到 QML【英文标题】:Q_PROPERTY from other QThread send variable to QML 【发布时间】:2014-04-02 15:00:05 【问题描述】:当我在其他 QThread 中使用 Q_PROPERTY 时出现错误:非法尝试连接到...,它与 QML 引擎位于不同的线程中。
//myclass.cpp
Q_PROPERTY(QString FileReady READ GetFileReady NOTIFY FileReadyChanged)
这是在其他 QThread 中。 在主线程中,我有 QtQuick2ApplicationViewer 并像这样连接 Q_PROPERTY:
//main.cpp
MyClass cObject1();
QThread cThread1; //create new thread
cObject1.DoSetup(cThread1); //connect
cObject1.moveToThread(&cThread1); //move work to other thread
viewer.rootContext()->setContextProperty("otherthread",&cObject); // propably bad line
如何将其他线程中的 myclass 中的属性发送到主线程中的 QML? 如果可以,请举一个小例子。
【问题讨论】:
【参考方案1】:创建类“模型”,该对象将留在主线程中并将其与 QML 连接。 创建“Worker”类,它可以在其他线程中执行您想要执行的操作,并将更新从此类的对象发送到“Model”类的对象(默认连接应该可以解决问题)。 在其他方向上,“模型”应该为“工人”安排任务。
这样您就可以让线程远离 QML 引擎。
【讨论】:
以上是关于来自其他 QThread 的 Q_PROPERTY 将变量发送到 QML的主要内容,如果未能解决你的问题,请参考以下文章
来自非 Qt 线程的 QThread::getCurrentThread()
QSqlDatabase:无法使用来自 QThread 的连接
QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)