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

news/2024/7/16 4:25:55

目录

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 将当前函数暴露给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 <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.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!")
        }
    }
}


http://lihuaxi.xjx100.cn/news/1863624.html

相关文章

家政服务预约小程序系统的开发;

家政服务预约小程序系统的开发&#xff0c;既是对传统加盟服务模式的创新&#xff0c;也是家政商家企业营销推广服务的升级。它推动整个家政服务行业实现线上线下深度融合&#xff0c;提升用户消费体验&#xff0c;实现了雇主、服务提供者、家政企业商家三者之间的无缝衔接&…

设计模式之代理模式(1)

目录 概述定义应用场景主要角色类图 详述基本代码应用实例符合的设计原则 总结 概述 定义 代理模式是一种结构型设计模式&#xff0c;它允许通过一个代理对象来控制对原始对象的访问。代理对象可以在不改变原始对象的情况下&#xff0c;增加一些额外的功能&#xff0c;例如权限…

人工智能学习7(决策树算法)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm 决策树算法信息熵信息熵例题计算&#xff1a; 信息增益&#xff08;决策树划分依据之一ID3&#xff09;信息增益例题计算&#xff1a; 信息增益率(决策树划分依据之一C4.5)基尼值和基尼指数(决策树划分依据之…

Ubuntu下进行串口卡驱动

Ubuntu下安装串口卡驱动 1.下载厂家提供的驱动上传至本地电脑 cd &#xff08;驱动路径下&#xff09; 2.Lspci -v 查看电脑串口卡信息 3.下载编译包 sudo apt-get update sudo apt-get install build-essential linux-headers-$(uname -r) 4.编译驱动 make sudo make i…

python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码 计算机文件大小单位 b bit 位(比特) B Byte 字节 1Byte 8 bit #一个字节等于8位 可以简写成 1B 8b 1KB 1024B 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB 1EB 1024PB 进制分类 二进制:由2个数字组成,有0 和 1 pyth…

Linux系统安装Python3环境

1、默认情况下&#xff0c;Linux会自带安装Python&#xff0c;可以运行python --version命令查看&#xff0c;如图&#xff1a; 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了&#xff08;CtrlD退出python命令窗口&#xff09;。 2…

新的 BLUFFS 攻击导致蓝牙连接不再私密

蓝牙是一种连接我们设备的低功耗无线技术&#xff0c;有一个新的漏洞需要解决。 中间的攻击者可以使用新的 BLUFFS 攻击轻松窥探您的通信。 法国研究中心 EURECOM 的研究员 Daniele Antonioli 演示了六种新颖的攻击&#xff0c;这些攻击被定义为 BLUFFS&#xff08;蓝牙转发和…

前端初学者的Ant Design Pro V6总结(下)

前端初学者的Ant Design Pro V6总结&#xff08;下&#xff09; 文章目录 前端初学者的Ant Design Pro V6总结&#xff08;下&#xff09;umi 请求相关一个能用的请求配置Service层 TS 类型规范Service层 函数定义umi 请求代理 Proxy umi/max 简易数据流useModel 没有类型提示&…