目录
1、cpp 创建一个类
2、将类对象暴露给QML
3、QML通过对象直接调用cpp函数
1、cpp 创建一个类
类模板如下:
#include <QtCore/QObject>class vacUdpClient: public QObject{Q_OBJECTpublic: 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.0import 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!")}}}