QT:QML与C++交互

目录

一.介绍

二.pro文件添加模块

三.h文件

四.cpp文件

五.注册

六.调用

七.展示效果

八.代码

1.qmlandc.h

2.qmlandc.cpp

3.main.cpp

4.qml


一.介绍

在 Qt 中,QML 与 C++ 交互是非常重要的,因为它允许开发人员充分利用 QML 和 C++ 各自的优势,实现更加灵活和高效的应用程序开发。

QML 是一种声明性的语言,用于构建用户界面,具有直观、简洁和易于理解的特点,适合用于描述界面的外观和交互逻辑。而 C++ 是一种强大的编程语言,可以进行复杂的计算和处理逻辑,适合用于实现底层功能和业务逻辑。

通过 QML 与 C++ 的交互,可以实现以下作用和重要性:

1.性能优化:C++ 可以处理复杂的计算和逻辑,可以提高应用程序的性能。通过将一些计算密集型的任务交给 C++ 处理,可以提高应用程序的响应速度和性能表现。

2.业务逻辑处理:C++ 可以处理底层的业务逻辑,如数据处理、文件操作、网络通信等。QML 可以专注于界面的呈现和交互逻辑,而将复杂的业务逻辑交给 C++ 处理,可以更好地分离界面和业务逻辑,提高代码的可维护性和可重用性。

3.跨平台开发:Qt 支持跨平台开发,通过 QML 与 C++ 的交互,可以实现跨平台的应用程序开发。开发人员可以在 QML 中描述界面,同时在 C++ 中处理平台相关的逻辑,从而实现跨平台的应用程序开发。

4.灵活性和可扩展性:通过 QML 与 C++ 的交互,可以实现界面与逻辑的分离,使得应用程序结构更加清晰和灵活。开发人员可以根据需求选择在 QML 中实现界面逻辑,或者在 C++ 中实现复杂的逻辑,从而实现更加灵活和可扩展的应用程序。

总的来说,QML 与 C++ 交互的作用和重要性在于充分发挥各自的优势,实现界面与逻辑的分离,提高应用程序的性能、可维护性和可扩展性,从而更好地满足复杂应用程序的开发需求。

二.pro文件添加模块

.qml模块

三.h文件

1.首先,继承自 QObject 类,是 Qt 框架中所有 QML 对象的基类。

2.其次,定义了一个 Q_PROPERTY 宏,用于在 QML 中声明此类的属性,并提供 READWRITE 和 NOTIFY 三个选项。这里定义了一个名为 name 的属性,可以在 QML 中通过 name 访问,通过 getname 函数获取属性值,通过 setName 函数设置属性值,并通过 NameChangedSig 信号通知 QML 端属性值的改变。

3.接下来,构造函数 qmlandc(),可以在此处进行一些初始化工作。

4.然后,定义了一个 setName 函数,用于在 C++ 端设置 name 属性的值,并在函数末尾通过 NameChangedSig 信号通知 QML 端属性值的改变。

5.接下来,定义了一个 getname 函数,用于在 C++ 端获取 name 属性的值。

6.最后,定义了一个 NameChangedSig 信号,用于在 C++ 端通知 QML 端 name 属性值的改变。

四.cpp文件

1.首先,构造函数 qmlandc() 将 m_name 属性初始化为字符串 "美女"。

2.然后,setName 函数用于设置 m_name 属性的值。如果传入的 name 参数与当前 m_name 属性的值相同,则直接返回,不进行任何操作。否则,将 m_name 属性的值设置为传入的 name 参数,并通过 qDebug() 函数输出当前 m_name 属性的值,最后通过 emit 关键字触发 NameChangedSig 信号。

3.最后,getname 函数用于获取 m_name 属性的值,并将其作为 QString 类型的返回值返回。

五.注册

六.调用

七.展示效果

初始值调用c++中getname显示为:美女,

点击矩形框调用c++中setname为:帅哥。

八.代码

1.qmlandc.h

#ifndef QMLANDC_H
#define QMLANDC_H#include <QObject>
#include <QDebug>class qmlandc : public QObject
{Q_OBJECTQ_PROPERTY(QString name READ getname WRITE setName NOTIFY NameChangedSig)public:qmlandc();void setName(QString name);QString getname();signals:void NameChangedSig();public slots:private:QString m_name;
};#endif // QMLANDC_H

2.qmlandc.cpp

#include "qmlandc.h"qmlandc::qmlandc()
{m_name = "美女";
}void qmlandc::setName(QString name)
{if(m_name == name){return ;}m_name = name ;qDebug()<<"aaaaaaaa"<<m_name;emit NameChangedSig();
}QString qmlandc::getname()
{return  m_name;
}

3.main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlEngine>
#include "qmlandc.h"
int main(int argc, char *argv[])
{QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);//qmlRegisterType注册c++类型至qml//arg1:import时模块名//arg2:主版本号//arg3:次版本号//arg4:qml类型名qmlRegisterType<qmlandc>("Qmlqmlandc", 1, 0 ,"Qmlqmlandc");QQmlApplicationEngine engine;const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);return app.exec();
}

4.qml

import QtQuick 2.7
import Qmlqmlandc 1.0
import QtQuick.Window 2.2
import QtQuick.Controls 1.4Window {visible: truewidth: 400height: 400Qmlqmlandc{id:_Qmlqmlandc}Rectangle{anchors.fill: parentRectangle{width: 50height: 50border.width: 1border.color: "black"MouseArea{anchors.fill: parentonClicked: {_Qmlqmlandc.name = "帅哥"}}}Text {anchors.right: parent.rightanchors.rightMargin: 100font.pixelSize: 30text: _Qmlqmlandc.name}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我21岁玩“撸货”,被骗1000多万

最近&#xff0c;撸货业界内发生了一些颇受瞩目的事件。 在郑州&#xff0c;数码档口下面抢手团长跑路失联&#xff0c;涉及金额几百万&#xff0c;在南京&#xff0c;一家知名的电商平台下的收货站点突然失联&#xff0c;涉及金额高达一千多万&#xff0c;令众多交易者震惊不已…

YOLOv8改进 | 图像修复 | 适用多种复杂场景的全能图像修复网络AirNet助力YOLOv8检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是一种适用多种复杂场景的全能图像修复网络AirNet&#xff0c;其由对比基降解编码器&#xff08;CBDE&#xff09;和降解引导修复网络&#xff08;DGRN&#xff09;两个神经模块组成&#xff0c;能够在未知损坏类型和程度的情况下恢复受…

Java | Leetcode Java题解之第92题反转链表II

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 设置 dummyNode 是这一类问题的一般做法ListNode dummyNode new ListNode(-1);dummyNode.next head;ListNode pre dummyNode;for (int i 0; …

【SQL】SQL常见面试题总结(3)

目录 1、聚合函数1.1、SQL 类别高难度试卷得分的截断平均值&#xff08;较难&#xff09;1.2、统计作答次数1.3、得分不小于平均分的最低分 2、分组查询2.1、平均活跃天数和月活人数2.2、月总刷题数和日均刷题数2.3、未完成试卷数大于 1 的有效用户&#xff08;较难&#xff09…

蓝桥杯 EDA 组 历届国赛真题解析

一、2021年国赛真题 1.1 CN3767 太阳能充电电路 CN3767 是具有太阳能电池最大功率点跟踪功能的 4A&#xff0c;12V 铅酸电池充电管理集成电路。 最大功率点应指的是电池板的输出电压&#xff0c;跟踪电压其做保护。当然 CN3767 也可以直接使用直流充电&#xff0c;具体可以阅读…

DS高阶:跳表

一、skiplist 1.1 skiplist的概念 skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key或者key/value的查找模型。skiplist是由William Pugh发明的&#xff0c;最早出现于他在1990年发…

Python学习之路 | Python基础语法(一)

数据类型 Python3 中常见的数据类型有&#xff1a; Number&#xff08;数字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布尔类型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元组&#xff09;Set&#xff08;集合&#xff09;Dict…

【Image captioning】基于检测模型网格特征提取——以Sydeny为例

【Image captioning】基于检测模型网格特征提取——以Sydeny为例 今天,我们将重点探讨如何利用Faster R-CNN检测模型来提取Sydeny数据集的网格特征。具体而言,这一过程涉及通过Faster R-CNN模型对图像进行分析,进而抽取出关键区域的特征信息,这些特征在网格结构中被系统地…

代码随想录--链表--反转链表

题目 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表&#xff0c;实现链表元素的反转&#xff0c;其实这是对内存空间的浪费。 其实只需要改变链表的next指针的…

GPU学习记一下线程分组相关

在compute的时候&#xff0c;是要dispatch一个数量的代表分了多少块任务集&#xff0c;dispatch的块内部也是有一个数量的&#xff0c;那么这些值怎么取的呢 内部&#xff0c;N卡32 外面dispatch的数量就是all/32 然后细说这个值 这有一个叫core的东西&#xff0c;就是相当于th…

嵌入式学习-PWM输出比较

简介 PWM技术 输出比较框图介绍 定时器部分 比较器控制部分 输出控制部分 相关寄存器

(5.4–5.10)投融资周报|共38笔公开投融资事件,基础设施领跑,游戏融资活跃

5月4日至5月10日期间&#xff0c;加密市场共发生38笔投融资事件&#xff0c;其中基础设施18笔、游戏5 笔、其他4 笔、DeFi 3笔、Depin 3 笔、CeFi 2笔、NFT2笔、 RWA1笔。 本周千万美金以上融资有5笔&#xff1a; 加密货币交易公司Arbelos完成了一轮2800 万美元的种子轮融资&…

智慧园区EasyCVR视频智能管理方案:构建高效安全园区新视界

一、背景分析 园区作为城市的基本单元&#xff0c;是最重要的人口和产业聚集区。根据行业市场调研&#xff0c;90%以上城市居民工作与生活在园区进行&#xff0c;80%以上的GDP和90%以上的创新在园区内产生&#xff0c;可以说“城市&#xff0c;除了马路都是园区”。 园区形态…

C++ static_cast学习

static_cast可实现&#xff0c; 1 基本类型之间的转换 2 void指针转换为任意基本类型的指针 3 用于有继承关系的子类与父类之间的指针或引用的转换 用于基本类型转化时&#xff0c;会损失精度类似于C语言的强制转化&#xff1b; 下面先看一下void指针的转换&#xff1b; …

镜像抑制和镜像衰减有什么不同

在很多无线产品接收机手册中&#xff0c;我们会看到两个参数&#xff0c;一个是镜像抑制&#xff08;Image Rejection&#xff09;&#xff0c;另一个是镜像衰减&#xff08;Image Attention&#xff09;&#xff0c;但这两者究竟有什么不同&#xff0c;一直比较疑惑&#xff0…

三路输出小功率开关电源【MATLAB/simulink】

拟选用一种DC-DC变换器拓扑使用1700 V SiC MOSFET或IGBT设计三相功率系 统的高频开关直流辅助电源&#xff0c;它可用于太阳能逆变器、工业开关电源、电动汽车充电器、 电机驱动装置等领域。&#xff08;建议采用单端反激式电路拓扑&#xff0c;开关频率为80kHz) 电路基本参数&…

【Unity学习笔记】第十七 Quaternion 中 LookRotation、Lerp、Slerp、RotateTowards等方法辨析与验证

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/138909256 作者&#xff1a;CSDN|Ringleader| 目录 Quaternion API 速览FromToRotation在Transform中的应用LookRotation 中upwards取Vector3.up和 transform.up的区别旋转时如何保持Y轴不变&#xff…

战网国际服怎么下载 暴雪战网一键下载安装图文教程

战网国际版&#xff0c;或称为Battle.net全球版&#xff0c;是暴雪娱乐构建的一项跨越国界的综合游戏交流平台&#xff0c;它无视地理限制&#xff0c;旨在服务全球每一个角落的游戏爱好者。不同于地区专属版本&#xff0c;国际版为玩家开启了一扇无门槛的大门&#xff0c;让每…

org.springframework.jdbc.BadSqlGrammarException

Cause: java.sql.SQLSyntaxErrorException: Table ‘web.emp’ doesn’t exist 产生原因&#xff1a;web表找不到&#xff0c;所以可能数据库配置错误 spring.datasource.urljdbc:mysql://localhost:3306/web02 更改完成后运行成功

免费利器:会议之眼一键生成论文功能火爆上线 助你快速起航

会议之眼 快讯 亲爱的会议之眼粉丝们&#xff0c;你们是否曾经为了写论文而彻夜苦思冥想&#xff1f;是否曾经为了找资料而焦头烂额&#xff1f; 今天小编带来了一个令人兴奋的消息&#xff0c;那就是会议之眼网页端平台的全新功能——“一键生成论文”已经重磅上线啦&#x…