【问题标题】:How to do QObject::connect to QJSValue?如何做 QObject::connect 到 QJSValue?
【发布时间】:2023-01-11 16:24:35
【问题描述】:

如果Qml可以做到

MyComponent.connect(someJsFunction);

我怎么能在 C++ 上做到这一点??? 如果 ISCallable 没有解决方法,我需要连接 JSValue。我想知道它是如何使 qml 引擎...

QObject::connect(QObject, signal, QJSValue, evaluateFunctionSlot);

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    这会起作用。我从这个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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多