C++与QML通信

C++类继承QObject,在定义中增加Q_Object。

在main函数中

QQmlApplicationEngine engine;

方法一:注册类到QML

qmlRegisterType("JR.UIMgr ", 1, 0, "UIMgr ");

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

在QML中需要

import JR.UIMgr 1.0

声明UIMgr {}对象,在调用C++的方法

方法二:C++注册类,在绑定到QML中

UIMgr uiMgr;

QQmlContext * context = engine.rootContext();

context->setContextProperty("uiMgr", &uiMgr);

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

在qml中可直接使用uiMgr去调用C++的方法或属性,不需要import


1)QML调用C++类的方法,要在声明方法前加Q_INVOKABLE字段

2)使用Q_PROPERTY的方式

Q_PROPERTY(type Name READ getName WRITE setName NOTIFY NameChanged)

可在QML使用uiMgr.Name="ABC",将直接调用setName方法

var nnn = uiMgr.Name将直接调用getName方法

其中getName只能返回type类型的结构,而setName方法也只能有一个type类型的参数,否则编译时会出错。

你可能感兴趣的:(C++与QML通信)