如何从 QML 调用 C++ 成员函数作为异步调用
Howto call c++ member function as async call from QML
我正在从 QML
调用 Q_INVOKABLE
成员函数。 GUI 冻结,直到函数完全执行。我在可调用函数中正在进行一些网络操作,因此我希望 GUI 继续执行并且不阻止函数完成。
QT 文档包含 WorkerScript QML 但这不能满足我的要求,因为我无法在 .mjs 文件中调用可调用函数。
他们是如何处理此类问题的 QT 方法吗?
PS:我已经将我的 C++
class 暴露给 QML,如下所示
Engine.rootContext()->setContextProperty("myClass", &obj);
并且在 qml
中,我将成员函数调用为:
onTriggered: {
myClass.myFunction( ... ); // This function needs to be executed async
}
qml中没有async模型,所以添加了workerscript
要在 C++ 端获得类似的行为,您必须使用 QThread。要在工作线程完成后将计算结果传回 QML,您可以在 QML 端将回调连接到工作线程完成后 class 发出的给定信号。要在 QML 中创建连接,您可能必须使用连接 class [ https://doc.qt.io/qt-5/qml-qtqml-connections.html ],具体取决于您的 c++ class暴露给qml.
我正在从 QML
调用 Q_INVOKABLE
成员函数。 GUI 冻结,直到函数完全执行。我在可调用函数中正在进行一些网络操作,因此我希望 GUI 继续执行并且不阻止函数完成。
QT 文档包含 WorkerScript QML 但这不能满足我的要求,因为我无法在 .mjs 文件中调用可调用函数。
他们是如何处理此类问题的 QT 方法吗?
PS:我已经将我的 C++
class 暴露给 QML,如下所示
Engine.rootContext()->setContextProperty("myClass", &obj);
并且在 qml
中,我将成员函数调用为:
onTriggered: {
myClass.myFunction( ... ); // This function needs to be executed async
}
qml中没有async模型,所以添加了workerscript
要在 C++ 端获得类似的行为,您必须使用 QThread。要在工作线程完成后将计算结果传回 QML,您可以在 QML 端将回调连接到工作线程完成后 class 发出的给定信号。要在 QML 中创建连接,您可能必须使用连接 class [ https://doc.qt.io/qt-5/qml-qtqml-connections.html ],具体取决于您的 c++ class暴露给qml.