【发布时间】:2023-01-11 16:24:35
【问题描述】:
如果Qml可以做到
MyComponent.connect(someJsFunction);
我怎么能在 C++ 上做到这一点??? 如果 ISCallable 没有解决方法,我需要连接 JSValue。我想知道它是如何使 qml 引擎...
QObject::connect(QObject, signal, QJSValue, evaluateFunctionSlot);
【问题讨论】:
如果Qml可以做到
MyComponent.connect(someJsFunction);
我怎么能在 C++ 上做到这一点??? 如果 ISCallable 没有解决方法,我需要连接 JSValue。我想知道它是如何使 qml 引擎...
QObject::connect(QObject, signal, QJSValue, evaluateFunctionSlot);
【问题讨论】:
这会起作用。我从这个SO post 得到了解决方案。也就是说,我不知道它是否符合 Qt 的执行方式。他们调用 QML 方法的 example 使用 QMetaObject::invokeMethod()。
主.cpp
#include <QGuiApplication>
#include <QQuickItem>
#include <QQuickView>
class MyClass : public QObject
{
Q_OBJECT
signals:
void cppSignal(const QString &msg);
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view(QUrl(u"qrc:/75069400/main.qml"_qs));
view.show();
QObject *item = view.rootObject();
MyClass myClass;
QObject::connect(&myClass, SIGNAL(cppSignal(QString)),
item, SLOT(callFromCpp(QString)));
emit myClass.cppSignal("this is a test");
return app.exec();
}
#include "main.moc"
主.qml
import QtQuick
Rectangle {
width: 320
height: 240
function callFromCpp(value : string) {
console.log("QML" , value)
}
}
【讨论】: