目录

1、cpp 创建一个类

2、将类对象暴露给QML

3、QML通过对象直接调用cpp函数

1、cpp 创建一个类

类模板如下: 

#include

class vacUdpClient: public QObject

{

Q_OBJECT

public:

vacUdpClient(QObject* parent = nullptr): QObject(parent) {}

// Q_INVOKABLE 将当前函数暴露给QML

Q_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

#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.0

ApplicationWindow {

width: 360

height: 360

visible: true

Text {

anchors.centerIn: parent

text: "Hello, QML!"

}

Button {

id: sendBtn

text: "发送"

onClicked: {

// 这里的 udpclient 对应setContextProperty的第一个参数

// triggerClickEvent 是 Q_INVOKABLE 暴露出来的函数

udpclient.triggerClickEvent("hello, world!")

}

}

}

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: