如何从 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.