天天看點

qml與c++互動的四種機制

在這裡不外乎有四種方法:

  1. 暴露已存在的Qt C++對象給QML
  2. 注冊Qt C++類類型給QML
  3. QML中的Signal Handler(相當于Qt C++發送信号給QML端,QML端的Signal Handler進行處理)。
1. 2. MyClass myObj;
engine.rootContext()->setContextProperty(“myObjectExposeByCXProperty”, &myObj );      
  1. 在Qt C++端建立QML對象,既然對象都有了。那你想怎麼樣它就怎麼樣它呗。
  2. qml與c++互動的四種機制
  3. 前兩種都很簡單

    1,暴露已存在的Qt C++對象給QML

  4. 注冊Qt C++類類型給QMLqmlRegisterType(“RegisterMyType”, 1, 0, “MyClassType”);3 .QML中的Signal Handler(相當于Qt C++發送信号給QML端,QML端的Signal Handler進行處理)。先暴露給qml:
1. MyClass myObj;
engine.rootContext()->setContextProperty(“myObjectExposeByCXProperty”, &myObj );
qml中連接配接信号:
Connections
{
target: myObjectExposeByCXProperty
onMyStringChanged:textEdit.text= myObjectExposeByCXProperty.myString;
}      
  1. 在Qt C++端建立QML對象,既然對象都有了。那你想怎麼樣它就怎麼樣它呗。

    這相對比較難搞一點,弄不好久找不到這個qml對象。

    1,建立一個MyItem.qml

import QtQuick 2.0

Item {
    function myQmlFunction(msg) {
    console.log("Got message:", msg)
    return "some return value"
    }
}
      
QQmlEngine *engine = new QQmlEngine;
 QQmlComponent component(engine, QUrl(QStringLiteral(“qrc:/MyItem.qml”)));
 qDebug()<<component.errors ();
 QObject *myObject = component.create();
 QVariant returnedValue;
 QVariant msg = “Hello from C++”;
 QMetaObject::invokeMethod(myObject, “myQmlFunction”,
 Q_RETURN_ARG(QVariant, returnedValue),
 Q_ARG(QVariant, msg));      

繼續閱讀