目录
1、cpp 创建一个类
2、将类对象暴露给QML
3、QML通过对象直接调用cpp函数
1、cpp 创建一个类
类模板如下:
#include <QtCore/QObject>class vacUdpClient: public QObject
{Q_OBJECT
public: vacUdpClient(QObject* parent = nullptr): QObject(parent) {}// Q_INVOKABLE 将当前函数暴露给QMLQ_INVOKABLE double triggerClickEvent(const QString& qstr);private:/* data */
};
要求:
- 使用 Q_OBJECT 宏需要继承 QObject 类。Q_OBJECT能够启用信号和槽机制、使用动态属性系统。(使用 Q_OBJECT 宏的类需要通过Qt的元对象编译器(moc)进行处理。)
- 使用 Q_INVOKABLE 修饰要暴露给 QML 的函数。
2、将类对象暴露给QML
使用 setContextProperty 将 c++ 对象注册为qml可以识别的对象,setContextProperty两个参数表示的意义为:
- 第一个参数表示 qml 可以识别的对象名
- 第二个参数表示 C++ 对象
#include <QtQml/QQmlContext>
#include "vacUdpClient.h"/*** main.cpp ***/
vacUdpClient udpclient;
QQmlContext* context = engine.rootContext();
context->setContextProperty("udpclient", &udpclient);
3、QML通过对象直接调用cpp函数
import QtQuick 2.0
import QtQuick.Controls 2.0ApplicationWindow {width: 360height: 360visible: trueText {anchors.centerIn: parenttext: "Hello, QML!"}Button {id: sendBtntext: "发送"onClicked: {// 这里的 udpclient 对应setContextProperty的第一个参数// triggerClickEvent 是 Q_INVOKABLE 暴露出来的函数udpclient.triggerClickEvent("hello, world!")}}
}