天天看点

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));      

继续阅读