当前位置:首页 >> 开发者生态 >> 【QML】QML与cpp交互(一)—— QML直接调用cpp函数,viewpad10

【QML】QML与cpp交互(一)—— QML直接调用cpp函数,viewpad10

cpugpu芯片开发光刻机 开发者生态 1
文件名:【QML】QML与cpp交互(一)—— QML直接调用cpp函数,viewpad10 【QML】QML与cpp交互(一)—— QML直接调用cpp函数

目录

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!")}}}

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接