当前位置: 首页 > news >正文

Qt Quick介绍

一.Qt Quick介绍

Qt Quick 是 QML 类型和功能的标准库,包括视觉类型、交互式类型、动画、模型和视图、粒子效果和着色效果
Qt Quick 使用 QML 作为声明语言,来设计以用户界面为中心的应用程序
QML 包含大量使用手机移动设备的功能模块,比如基本部件(QtQuick 模块)、GPS 定位、渲染特效、蓝牙、NFC、WebkKit 等等;

二.QML 介绍

QML 是一种用户界面规范和标记语言,允许开发人员和设计师创建高性能、流畅的动画和视觉吸引人的应用程序,像 C++ 一样,QML 是一种语言,文件格式以 .qml 结尾
QML 提供了一种高度可读、声明性、类似 JSON 的语法,支持与动态属性绑定相结合的命令式 JavaScript 表达式;

三.QML与C++混合编程

1.混合编程介绍

混合编程就是通过QML高效便捷的构建UI界面,而使用C ++来实现业务逻辑和复杂算法
Qt集成了QML引擎和Qt元对象系统,使得QML很容易从C ++中得到扩展;QML可以访问QObject派生类的成员如:信号 (signals),槽函数 (slots),枚举类型 (Q_ENUMS),属性 (Q_PROPERTY),成员函数 (Q_INVOKABLE );

2.QML调用C++
(1)方式一:

在C ++中实现一个派生自QObject的类,类中定义成员函数时使用Q_INVOKABLE宏来修饰;类中的属性或成员变量要用Q_PROPERTY 宏来修饰
在private区声明Q_OBJECT宏
使用qmlRegisterType()函数,将该类注册到QML环境中
QML环境中使用该类型创建QQmlApplicationEngine的对象,使C ++类在QML中作为一个数据类型,例如函数参数类型或属性类型,也可以使用其枚举类型、单例等,功能更强大
在QML上使用QQmlContext::setContextProperty(); 直接嵌入一些 C++ 数据或对象为上下文属性给QML使用
可以把 C++ 对象的信号连接到 QML 中定义的方法上,也可以把 QML 对象的信号连接到 C++ 对象的槽上,还可以直接调用 C++ 对象的槽或信号

(2)方式二:

在C ++中构造一个对象
将这个对象设置为QML的上下文属性
在QML环境中直接使用该属性

3.C++调用QML

在 C++ 中可以用QQmlComponent或QQuickView加载QML文件就可以访问QML对象了。QQuickView提供了一个显示用户界面的窗口,而QQmlComponent没有。
C++ 访问QML的属性:
先创建QQmlEngine 类型的引擎对象
创建QQmlComponent组合对象为引擎对象加载qml文件
调用QQmlComponent组合对象create()方法创建一个QObject对象
调用QObject的findChild()方法或findchildren()方法查询指定元素
调用QObject的property()和setProperty()方法动态获取或修改QML中元素的属性;
使用QQmlProperty::read()/write()来读取、修改height属性值
C++ 访问QML的函数和信号:
在C++中使用 QMetaObject::invokeMethod() 静态方法调用QML中的函数;
C++中使用 QObject::connect() 连接QML中的信号;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • js-promise、async/await
  • 缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)
  • WPF 深入理解四、样式
  • 用Flask定制指令上传Excel数据到数据库
  • 常用的sql语句
  • 板凳------56.Linux/Unix 系统编程手册(下) -- SOCKET 介绍
  • 4.2、浏览器请求详解(ajax、fetch、axios使用,手写ajax)
  • 【CTS】android CTS测试
  • Nginx和Tomcat负载均衡、动静分离集群1
  • 【C++】#20,#21
  • Maven下载安装、环境配置(超详细)(包括Windows、IDEA)
  • 解决帝国cms栏目管理拼音乱码的问题
  • 数学建模基础:线性模型
  • MySQL-DML-约束
  • 为何云原生是未来?企业IT架构的颠覆与重构(上)
  • JS 中的深拷贝与浅拷贝
  • SegmentFault for Android 3.0 发布
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Laravel 菜鸟晋级之路
  • overflow: hidden IE7无效
  • SpringBoot 实战 (三) | 配置文件详解
  • Swift 中的尾递归和蹦床
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 对超线程几个不同角度的解释
  • 日剧·日综资源集合(建议收藏)
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习使用ExpressJS 4.0中的新Router
  • 1.Ext JS 建立web开发工程
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​如何在iOS手机上查看应用日志
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)fiber的基本认识
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 物件導向與老子思想 (OO)
  • (正则)提取页面里的img标签
  • .NET C# 操作Neo4j图数据库
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET6实现破解Modbus poll点表配置文件
  • .net操作Excel出错解决
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .sdf和.msp文件读取
  • /etc/skel 目录作用
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [bug总结]: Feign调用GET请求找不到请求体实体类