Qt Quick 开发基础 + 实战(持续更新中…)

最近更新日期:2024/12/5

目录

一、Qt Quick简介

1.3 新建Qt Quick Application工程

1.3.1 导入Qt资源文件

1.3.2 设置应用图标(Windows系统)

二、QML

2.2 import

2.2.1 import模块

2.2.2 import代码文件

2.3 属性:property

2.4 方法

2.5 自定义信号

2.6 枚举

2.7 基本类型

2.8 其它类型

2.8.1 对象类型

2.8.2 JavaScript类型

 2.9 JavaScript

2.10 自定义QML组件

2.11 作用域

2.12 代码风格

三、Qt Quick基础

四、Qt Quick控件

五、Qt Quick对话框

六、图片

七、动画

八、图形效果

九、粒子效果

十、Qt Quick 3D

十一、模型与视图

十二、图表

十三、数据可视化

十四、多媒体

十五、QML与C++交互

十六、新能源汽车中控屏


一、Qt Quick简介

写在前面:

本篇文章虽然只是作为我的学习笔记,但也作为我日后复习之用,所以会认真并详细记录,但会分重点。

1.3 新建Qt Quick Application工程

这节主要讲2个知识点,1个是【导入Qt资源文件】,1个是【设置应用图标】。

1.3.1 导入Qt资源文件

首先在工程目录中新建一个名为 images 的文件夹,把程序需要用到的图片放进去,png、ico格式的都一起。(ico格式的是用来作为应用图标的)

这里不用分格式、用途,全部一股脑放这个文件夹里就行。

 图片放好之后,我们回到Qt Creator中,在工程目录中新建一个资源文件(Qt Resource File),文件名随意,我的就叫做images和图片文件夹名称一致。

添加好之后,你的工程目录中会多出一个后缀名为 .qrc 的文件,右键添加现有文件,把文件夹里的图片全部选中点击确定即可。然后你逐一点开这个qrc文件,就可以在这个文件里看到你上传的所有图片了。

到这里还没完,最后一步是点开工程目录中的 CMakeLists.txt 文件,然后在里面加一句代码(否则我们无法使用资源文件 ):

set(CMAKE_AUTORCC ON)

这样就导入完成了,虽然有一丢丢麻烦,但是你总不会一直导的,对吧!?

1.3.2 设置应用图标(Windows系统)

应用图标的格式要求是 .ico 格式,png、jpg其他的可不行哦!上面我们已经导入了1张 ico 格式的图片,接下来我们看一下怎么设置成应用图标吧!

(这里推荐一个图片转ico格式的网站,免费且广告很少:锤子在线工具。)

首先我们在工程目录中新建一个文本文档,把文件名改为 ico.rc,然后双击打开这个文件,还是记事本打开哈,在里面写入下面这句代码:

IDI_ICON1  ICON DISCARDABLE   "images/青蛙大头贴_256x256.ico"

 注意,双引号里面的是你自己的路径,写好之后保存该文件。

最后一步, 点开工程目录中的 CMakeLists.txt 文件,在 qt_add_executable 里面加上:

ico.rc

 我们运行一下看看,果然,报错了!

原来我们导入的资源文件是带中文的,真的是太太粗心了!但是为什么直接在 Image 模块中用带中文的路径能正常显示,而应用图标带中文就不行了呢?

这个我也不太清楚,建议大家还是都用英文和下划线吧!

把文件名改成英文,然后重新弄了一遍之后,运行成功了!包括任务栏图标也是这个可可爱爱的青蛙了~

二、QML

2.2 import

2.2.1 import模块

import是QML中的一个导入关键字,一般用于导入下面代码需要用到的模块。

这里讲一个特殊情况,比如在同一个代码文件中,我们需要导入多个名称相同或者非常相似的模块,容易搞混弄错,那么我们可以使用 as 关键字来给其中一些模块单独命名。

那相应的,我们使用这个模块的方式就要改变了,否则会报错。

2.2.2 import代码文件

代码文件比如说我们在其他qml文件中写了一些代码,想要在另外一个代码文件中使用,那么也需要import关键字去导入。

这种一般都是借用别人的代码,如果是我们自己写的话,大概率会直接在Qt Creator中新建相应的文件。

假设我们现在工程目录中粘贴了一个 MyButton的文件,现在想要在 Main.qml 中使用,那么就在顶部写上:

import "MyButton"

如果是文件中的代码文件该怎么导入呢?也很简单!直接把这个文件夹导入就行了,这样里面的所有文件都能使用了。

import "./FolderName"

格式就是 ./ + 文件夹名称 。另外,这个也可以用 as关键字来简写,像下面这样:

import "./FolderName" as Fn

Fn.MyButton1 {

}

Fn.MyButton2 {

}

import用好了,做大一点的项目也会方便、清晰很多哦!

2.3 属性:property

只读:修饰符 readonly

只读属性必须给初始值,之后不允许修改。

 附加属性

附加属性和附加信号处理器是一种允许对象使用额外的属性或信号处理器的机制,允许对象访问一些与个别对象相关的属性或者信号。

有点抽象对吧?没关系,看下面例子就行。

import QtQuick
import QtQuick.Controls

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    ListView {
        width: 150; height: 400

        model: ListModel {
            id: listModel

            Component.onCompleted: {
                for ( var i = 0; i < 50; i++ )
                {
                    listModel.append( { "name" : "Item " + i } )
                }
            }
        }

        delegate: Text {
            text: name
            font.pixelSize: 32
        }
    }
}

这里的 onCompleted 就是 Component 的附加属性。我们不需要了解过深,只需要会用,知道哪些属性有附加属性可供使用就行了。

2.4 方法

方法就是函数,可以执行某些处理或者触发其他事件。可以将方法关联到信号上,这样在发射该信号时就会自动调用该方法。

import QtQuick
import QtQuick.Controls

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    function add(parameter) {
        testLabel.testResult -= parameter
    }
    
    function add(parameter) {
        testLabel.testResult += parameter
    }
    
    function getSum(para1, para2)
    {
        var result
        result = para1 + para2
        return result
    }
}

在qml中的函数其实不用写的太复杂,如果你真的有很复杂的函数需要实现,可以在C++中。 

2.5 自定义信号

信号和信号接收器是一对,我们不仅可以在同一文件中去实现他们,甚至可以把信号写在另一个文件,在当前文件中用信号接收器去接收。

属性值改变信号

QML类型提供内建属性值改变信号,属性值改变就会自动发出信号。

Connections

用于连接外部对象的信号。可以接收指定目标的任意信号。

connect() 函数

将信号与动态创建的对象关联(也可以和函数关联)。

2.6 枚举

枚举(Enumeration)提供了一组固定的命名选项。

自定义的qml文件必须首字母大写。

枚举名字必须首字母大写。

2.7 基本类型

QML支持常见的数据类型,包括:整型、浮点型、字符串和布尔类型。在QML中,将这种仅指向简单数据的类型称为基本类型。

QML默认支持的基本类型
类型描述
int整型
bool布尔型
real单精度浮点型
double双精度浮点型
string字符串
listQML对象列表
url资源定位符
var通用属性类型
enumeration枚举
Qt Quick 模块提供的基本类型
类型描述
colorARGB颜色值
font字体类型
matrix4x44x4矩阵
quaternion四元数,包含一个标量以及x、y和z的属性
vector2d二维向量,包含x、y属性
vector3d三维向量,包含x、y、z属性
date日期
point点,包含x、y属性
size大小值,包含width、height属性
rect矩形值,包含x、y、width、height属性

 随便举几个例子:

2.8 其它类型

2.8.1 对象类型

QML对象类型用于对象实例化,与基本类型的区别是它可以声明一个对象。例如:Rectangle、Button等对象类型。

2.8.2 JavaScript类型

Qt Quick 支持JavaScript对象和数组。可以创建任何标准的JavaScript类型,例如:Date、Array等。

2.9 JavaScript

1. JavaScript在QML中的定位

1)辅助实现复杂的界面逻辑,扩展QML功能

2)主流是QML搭配C++实现完整的程序

3)执行效率远低于C++

4)过度使用JavaScript代码会导致复杂度增加、可维护性降低

2. 属性绑定

1)属性绑定可以是表达式、对象属性、JavaScript函数

2)语法  “属性 :值”

3)属性绑定一旦被重新赋值,就会解除绑定关系

4)如果需要重新绑定,使用 Qt.binding() 函数

3. 调用外部JavaScript文件

import "script.js" as MyScript

2.10 自定义QML组件

1. 定义对象类型

1)必须以大写字母开头,不能包含除字母、数字、下划线以外的字符。这个后缀名为 .qml 的文件会被引擎识别为1个QML类型的定义

2)同一目录的其它QML文件会被自动设置为可用

2. 自定义类型的可访问特性

property propertyType propertyName : value

将自定义类型的属性暴露出去,在其他文件就可以修改。

2.11 作用域

1. 作用

1)表达式可以访问哪些变量

2)重名时的优先级

2. 绑定的作用域对象

Item {
    anchors.left: parent.left
}

 3. 组件作用域

1)QML文件每个组件都定义了一个逻辑作用域

2)每个文件都至少有一个根组件

4. 作用域使用技巧

id.property(通过另一个作用域的id来调用)

2.12 代码风格

Qt帮助文档查找:QML Coding Conventions

1. QML对象声明

2. 属性组

3. 列表

4. 信号处理器

5. JavaScript代码

6. 复杂条件判断

三、Qt Quick基础

四、Qt Quick控件

五、Qt Quick对话框

六、图片

七、动画

八、图形效果

九、粒子效果

十、Qt Quick 3D

十一、模型与视图

十二、图表

十三、数据可视化

十四、多媒体

十五、QML与C++交互

十六、新能源汽车中控屏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter基础07_组件的层级

课程大纲 1. 优先级/执行顺序&#xff08;一般情况&#xff09; 同级组件&#xff1a;按组件先后顺序执行。如&#xff1a;同一层的线程组、同一层的http请求。 上下级组件&#xff1a;先执行外层&#xff08;上级&#xff09;&#xff0c;再执行内层&#xff08;下级&#xff…

Spring Cloud gateway 路由规则

Spring Cloud gateway 路由规则 文章目录 Spring Cloud gateway 路由规则一、路由常用属性解析1.1 示例配置1.2 属性解析 二、问题分析&#xff0c;springCloud微服务中没有任何路由配置&#xff0c;网关为什么能根据请求转发到相应的业务服务的2.1 开启&#xff0c;用于启用通…

一、理论基础-PSI

之前参加了隐语第2期&#xff0c;对隐语SecretFlow框架有了大致的了解&#xff0c;这次参加隐语第4期&#xff0c;学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义&#xff0c;PSI&#xff08;隐私集合求交&#xff0c;Private Set Intersection即PSI)是安全多方计算&#x…

ZLMediaKit+wvp (ffmpeg+obs)推拉流测试

这里使用了两种方式: ffmpeg命令和 OBS OBS推流在网上找了些基本没有说明白的, 在ZLMediaKit的issues中看到了一个好大哥的提问在此记录一下 使用OBS推流&#xff0c;rtmp&#xff0c;报鉴权失败 推流 1. ffmpeg命令推流 官方说明文档地址: 推流规则 rtsp://192.168.1.4:10554…

K8S,StatefulSet

有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题&#xff1f; 分布式应用&#xff0c;它的多个实例之间&#xff0c;往往有依赖关系&#xff0c;比如&#xff1a;主从关系、主备关系。 还有就是数据存储类应用&#xff0c;它的多个实例&#xff0c;往往都会在本地…

openEuler 知:安装系统

文章目录 前言图形化安装文本方式安装 前言 本文只介绍安装过程中需要特别注意的地方&#xff0c;常规的内容需要参考其它文档。 图形化安装 自定义分区&#xff1a; 说明&#xff1a;anaconda 默认分区&#xff0c;在 OSNAME.conf 中进行了配置&#xff0c;openEuler 默认根…

打通Vue3+Flask(python3)+Mysql-实现简单数据交互

一、需要准备的工具 下载python3&#xff0c;Vscode&#xff0c;pycharm&#xff08;这里用的社区版&#xff09;&#xff0c;phpstudy_pro&#xff0c;Node.js&#xff08;建议下载长期支持版本&#xff0c;版本不宜过低&#xff0c;比如18,20&#xff09;&#xff0c;Vue.js…

SpringBoot的validation参数校验

文章目录 前言一、引入validation 依赖二、validation中的注解说明 &#xff08;1&#xff09;Validated&#xff08;2&#xff09;Valid&#xff08;3&#xff09;NotNull&#xff08;4&#xff09;NotBlank&#xff08;5&#xff09;NotEmpty&#xff08;6&#xff09;Patte…

Webhook应用指南:借助mc工具实现智能自动化

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Webhook应用指南&#xff1a;借助mc工具实现智能自动化 前言Webhook 基础知识什么是 Webhook&…

【全网最新】若依管理系统基于SpringBoot的前后端分离版本配置部署

目录 提前准备&#xff1a; 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备&#xff1a; 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址&#xff1a;https://nodejs.org/dist/v22.12…

科学演进:现代视角下的亚里士多德理论100例

科学演进&#xff1a;现代视角下的亚里士多德理论100例 引言 亚里士多德&#xff08;Aristotle&#xff09;&#xff0c;公元前384年出生于希腊北部的斯塔吉拉&#xff0c;是古希腊最杰出的哲学家、科学家和教育家之一。他不仅是柏拉图的学生&#xff0c;深入学习了柏拉图的理…

98.【C语言】数据结构之队列

目录 1.定义 2.队头和队尾 3.示意图 4.实现队列 两种解决方法 1.使用双向带头循环链表 2.为单向链表再定义一个尾指针tail 操作队列的函数 初始化函数QueueInit 插入函数QueuePush 删除函数QueuePop 写法1 注意 写法2 计算队列大小函数QueueSize 销毁函数Queu…

SQL项目实战与综合应用——项目设计与需求分析

项目设计与需求分析是软件开发过程中的核心环节&#xff0c;尤其在涉及数据库的应用时&#xff0c;良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践&#xff0c;结合 C 与 SQL 的实际应用场景&#xff0c;涵盖项目需求收集、数据库设…

TCP的“可靠性”(下)——三次握手四次挥手

目录 建立连接&#xff08;三次握手&#xff09;为啥要进行握手&#xff1f;&#xff1f;意义何在&#xff1f;&#xff1f;常见面试题&#xff1a;为啥必须是三次握手&#xff1f; 断开连接&#xff08;四次挥手&#xff09;三次握手和四次挥手的相同点和不同点连接过程中涉及…

煤矿 35kV 变电站 3 套巡检机器人 “上岗”,力破供电瓶颈

近日&#xff0c;杭州旗晟智能科技与甘肃陈家沟煤矿35kV变电站配电室的三套智能巡检机器人线下测试顺利完成&#xff0c;并成功交付使用&#xff0c;这为陈家沟煤矿的电力运维工作注入了全新的活力与强大的技术支撑。 一、项目背景 甘肃陈家沟煤矿35kV变电站于2024年3月13日动…

【AI系统】推理参数

推理参数 本文将介绍 AI 模型网络参数方面的一些基本概念&#xff0c;以及硬件相关的性能指标&#xff0c;为后面让大家更了解模型轻量化做初步准备。值得让人思考的是&#xff0c;随着深度学习的发展&#xff0c;神经网络被广泛应用于各种领域&#xff0c;模型性能的提高同时…

列表| 习题+思维导图

列表习题 1. 已知列表xlist(range(9))&#xff0c;那么执行语句del x[:2]之后&#xff0c;x的值为&#xff08;D&#xff09; A.[1&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;9] B.[1&#xff0c;3&#xff0c;5&#xff0c;7] C.[0&#xff0c;1&#xff0c;3&a…

在freeBSD上开启IPSec内核功能

我使用的版本strongSwan 6.0.0, FreeBSD 14.1-RELEASE, amd64 背景 在freeBSD上配置strongSwan&#xff0c;启动charon时&#xff0c;一直遇到如下错误&#xff1a; unable to set IPSEC_POLICY on socket: Protocol not available过程 此前查阅的某个文档说 freeBSD已经默…

初识树(二叉树,堆,并查集)

本篇博客将涉及到一些专业名词&#xff1a;结点、深度、根、二叉树、满二叉树、完全二叉树、堆、并查集等。 概要 树型结构是一类重要的非线性数据结构。其中以树和二叉树最…

知从科技闪耀汽车智能底盘大会:共探软件安全新篇章

在汽车科技蓬勃发展的浪潮中&#xff0c;智能底盘技术正成为引领行业变革的关键力量。11月27日-28日&#xff0c;盖世汽车 2024 第四届汽车智能底盘大会盛大召开&#xff0c;上海知从科技有限公司受邀出席此次盛会&#xff0c;与众多汽车领域的精英齐聚一堂&#xff0c;共话智能…