C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用
文章目录
- 创建一个QT快速应用
- 创建项目
- 创建主视图
- 添加应用逻辑
- 为视图添加动画
- 素材文件
- 参考文章
创建一个QT快速应用
本教程使用内置的QML类型,介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息,请参阅用户界面。
本教程描述了如何使用Qt Creator实现Qt Quick状态和过渡。我们创建一个应用程序,在单击页面上的三个矩形时,显示一个移动的Qt标志。
关于QML:
QML(Qt Meta-Object Language)类型
是一种用于构建用户界面的声明性语言。它是Qt Quick框架的核心组成部分,用于描述应用程序的外观和行为。
QML类型是可重用的元素,可以通过组合和嵌套来创建复杂的用户界面。每个QML类型都有属性、信号和方法,可以在其他QML类型中使用和操作。
Qt提供了一些内置的QML类型,如Rectangle(矩形)、Text(文本)、Image(图片)等,这些类型可以直接在QML文件中使用。此外,还可以创建自定义的QML类型,以满足特定的需求。
使用QML类型,可以通过简单而直观的方式构建现代、响应式和动态的用户界面。它使得开发者能够更轻松地实现界面的交互和动画效果。
有关在设计模式下开发Qt Quick应用程序的更多信息,请参阅开发Qt Quick应用程序。
有关使用Qt Quick控件的示例,请参阅Qt Quick控件示例。
创建项目
- 选择“文件”>“新建文件或项目”>“应用程序”>“Qt Quick应用程序-滑动”>“选择”。
- 在“名称”字段中输入应用程序的名称。
- 在“创建位置”字段中输入项目文件的路径,然后选择“下一步”(或在macOS上选择“继续”)。
- 在“构建系统”字段中,选择要用于构建和运行项目的构建系统:qmake、CMake或Qbs。
- 在“Qt Quick控件样式”字段中,选择要使用的预定义UI样式之一,然后选择“下一步”。
- 选择要为其构建应用程序的平台的工具集。要构建适用于移动设备的应用程序,请选择Android ARM和iPhone OS的工具集,然后单击“下一步”。
注意:如果已在“工具”>“选项”>“工具集”(Windows和Linux)或“Qt
Creator”>“首选项”>“工具集”(macOS)中指定了工具集,则会列出工具集。
- 选择“下一步”。
- 查看项目设置,然后单击“完成”(或在macOS上单击“完成”)。
Qt Creator生成两个UI文件,Page1Form.ui.qml和Page2Form.ui.qml,以及一个QML文件,main.qml。可以在表单编辑器中修改Page1Form.ui.qml以创建应用程序的主视图,并在文本编辑器中修改main.qml以添加应用程序逻辑。对于本示例,可以忽略Page2Form.ui.qml。
创建主视图
应用程序的主视图在视图的左上角显示一个Qt标志和两个空矩形。
要在应用程序中使用qt-logo.png图像,必须将其从Qt示例目录复制到项目目录(与QML文件相同的子目录)。该图像将显示在资源中。也可以使用任何其他图像或QML类型。
-
在Projects视图中,双击打开Page1Form.ui.qml文件以在设计模式下编辑。
-
在导航器中,选择Label并按Delete键删除它。
-
在导航器中选择Page,并在Id字段中输入page。
-
在Library > Resources中,选择qt-logo.png并将其拖放到导航器中的页面上。
a. 在Id字段中输入icon。
b. 在Position字段中,将X设置为10,Y设置为20。 -
在Projects视图中右键单击资源文件qml.qrc,并选择Add Existing File将qt-logo.png添加到用于部署的资源文件中。
-
将一个Rectangle拖放到导航器中的页面上,并编辑其属性。
a. 在Id字段中输入topLeftRect。
b. 在Size字段中,将W设置为55,H设置为41,使矩形大小与图像大小相匹配。
c. 在Color字段中,点击(透明)按钮使矩形透明。
d. 在Border color字段中,将边框颜色设置为#808080。
e. 点击Layout,然后点击(Top)和(Left)锚定按钮将矩形锚定到页面的左上角。
f. 在Margin字段中,为顶部锚点选择20,为左侧锚点选择10。
-
从库中将Mouse Area类型拖放到导航器中的topLeftRect上。
-
点击Layout,然后点击
(Fill to Parent)按钮将鼠标区域锚定到矩形上。 -
在导航器中,通过按Ctrl+C复制topLeftRect,并按Ctrl+V将其粘贴到页面上两次。Qt Creator会将新实例命名为topLeftRect1和topLeftRect2。
-
选择topLeftRect1并编辑其属性:
a. 在Id字段中输入middleRightRect。
b. 在Layout中,选择
(垂直居中锚定按钮),然后选择
(右侧)锚定按钮将矩形锚定到其父级的中右边距。
c. 在Margin字段中,为右侧锚点选择10,为垂直居中锚点选择0。 -
选择topLeftRect2并编辑其属性:
a. 在Id字段中输入bottomLeftRect。
b. 在Layout中,选择
(底部)和
(左侧)锚定按钮将矩形锚定到其父级的左下边距。
c. 在Margin字段中,为底部锚点选择20,为左侧锚点选择10。 -
在导航器中,选择每个类型的
(导出)按钮以将所有类型导出为属性。这使可以在main.qml文件中使用这些属性。 -
按Ctrl+S保存更改。
要检查的代码,可以在文本编辑器中查看Page1Form.ui.qml文件,并将其与Page1Form.ui.qml示例文件进行比较。
新项目向导向Page1.qml文件添加样板代码以创建菜单项和推送按钮。通过删除过时的代码来修改样板代码。已从UI表单中删除了推送按钮,因此还需要从Page1.qml中删除相应的代码(否则无法构建应用程序)。
现在UI已经准备好,可以切换到在文本编辑器中编辑main.qml文件,以添加动画到应用程序,如下一节所述。
添加应用逻辑
编辑 main.qml 文件,添加两个额外状态 State1 和 State2 的指针。你无法使用表单编辑器为 Window QML 类型添加状态。请使用文本编辑器将状态添加到 StateGroup QML 类型中,并通过使用状态组的 id 引用它们。\
-
将窗口大小和背景颜色指定为 ApplicationWindow 类型的属性:
ApplicationWindow {visible: truewidth: 640height: 480title: qsTr("Tabs")
-
为 Page1 类型指定一个 id,以便能够使用在 Page1Form.ui.qml 中导出的属性:
SwipeView {id: swipeViewanchors.fill: parentcurrentIndex: tabBar.currentIndexPage1Form {id: page
-
在 mouseArea 中添加一个指向点击表达式的指针:
mouseArea {onClicked: stateGroup.state = ' '}
-
该表达式将状态设置为基本状态,并将图像返回到初始位置。
在 mouseArea1 中添加一个指向点击表达式的指针,将状态设置为 State1:mouseArea1 {onClicked: stateGroup.state = 'State1'}
-
在 mouseArea2 中添加一个指向点击表达式的指针,将状态设置为 State2:
mouseArea2 {onClicked: stateGroup.state = 'State2'} }
-
将 Qt 标志的位置绑定到矩形,以确保在不同大小的屏幕上缩放视图时,标志显示在矩形内部。设置 x 和 y 属性的表达式,如下面的代码片段所示:
StateGroup {id: stateGroupstates: [State {name: "State1"PropertyChanges {target: page.iconx: page.middleRightRect.xy: page.middleRightRect.y}},State {name: "State2"PropertyChanges {target: page.iconx: page.bottomLeftRect.xy: page.bottomLeftRect.y}}]
-
按 Ctrl+R 运行应用程序。
点击矩形以将 Qt 标志从一个矩形移动到另一个矩形。
为视图添加动画
在状态组内添加过渡以定义当Qt标志在状态之间移动时属性如何变化。这些过渡将动画应用于Qt标志。例如,当它移动到middleRightRect时,Qt标志会反弹回来,并平稳地进入bottomLeftRect。
-
在文本编辑器中,添加以下代码以指定当移动到State1时,Qt标志的x和y坐标在线性时间内变化1秒钟:
transitions: [Transition {from: "*"; to: "State1"NumberAnimation {easing.type: Easing.OutBounceproperties: "x,y";duration: 1000}},
-
可以使用Qt Quick工具栏中的动画功能将缓动曲线类型从线性更改为OutBounce:
a. 在文本编辑器中单击NumberAnimation以显示
图标,然后单击该图标以打开工具栏:
b. 在Easing字段中,选择Bounce。
c. 在Subtype字段中,选择Out。 -
添加以下代码以指定当移动到State2时,Qt标志的x和y坐标在2秒钟内变化,并且使用InOutQuad缓动函数:
...Transition {from: "*"; to: "State2"NumberAnimation {properties: "x,y";easing.type: Easing.InOutQuad;duration: 2000}},
-
添加以下代码以指定对于任何其他状态变化,Qt标志的x和y坐标在线性时间内变化200毫秒:
...Transition {NumberAnimation {properties: "x,y";duration: 200}}]
按Ctrl+R运行应用程序。
单击矩形以查看动画过渡效果。
素材文件
Files:
- transitions/Page1Form.ui.qml
- transitions/Page2Form.ui.qml
- transitions/main.qml
- transitions/qml.qrc
- transitions/transitions.pro
Images:
- transitions/qt-logo.png
参考文章
QT快速入门:创建您的第一个QML应用
相关文章:

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用
文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型,介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息,请参阅用户界面。 本教程描述了如何使用…...

用友时空KSOA SQL注入漏洞复现(HW0day)
0x01 产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品,是根据流通企业最前沿的I需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的IT系统之间彼此轻松对话,帮助流通企业保护原有的IT投资,简化IT管理&#…...
java中编写代码:如何以sftp的形式把文件从服务器上面下载下来?(有账号和密码)
在Java中,你可以使用JSch库来实现通过SFTP协议下载文件。以下是一个简单的示例代码: import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SFTPDownloa…...

【24择校指南】南京大学计算机考研考情分析
南京大学(A) 考研难度(☆☆☆☆☆) 内容:23考情概况(拟录取和复试分数人数统计)、院校概况、23初试科目、23复试详情、参考书目、各科目考情分析、各专业考情分析。 正文2178字,预计阅读:6分…...

IL汇编 ldarg 指令学习
IL汇编代码, .assembly extern mscorlib {} .assembly MathLib {.ver 1 : 0 : 1 : 0 }.module MathLib.dll.namespace MyMath { .class public ansi auto MathClass extends [mscorlib]System.Object{ .method public int32 GetSquare(int32) c…...

【ARM Cache 系列文章 9 番外篇 -- ARMv9 系列 Core 介绍】
文章目录 ARMv9 系列CoreARM Cortex-A510 介绍ARM Cortex-A715ARM Cortex-A720 ARMv9 系列Core 2021年5月Arm公布了其最新3款CPU和3款GPU核心设计,三款新CPU分别是旗舰核心Cortex-X2、高性能核心Cortex-A710、高能效核心Cortex-A510 CPU,三款新GPU核心则…...

章节7:Burp Intruder模块
章节7:Burp Intruder模块 参考资料 https://portswigger.net/burp/documentation/desktop/tools/intruder 01 Intruder模块作用与原理 原理 http://xxx.xx.com/bbs/index.php?namewuyanzu&mottogo 对请求参数进行修改,分析响应内容࿰…...
vue pc端项目el-upload上传图片时加水印
html代码: <a-uploadclass"avatar-uploader"list-type"picture-card":file-list"uploadFileList":custom-request"uploadDoneHandle":before-upload"beforeUpload":remove"removeHandle"v-decorat…...
ubuntu中redis+mysql安装使用
pip -V 回车(大写V):python包库安装路径 python -m site: python查找路径 1、redis ubuntu安装redis System has not been booted with systemd as init system (PID 1). Cant operate;该问题是systemctl start redis报错&#…...

若依-plus-vue启动显示Redis连接错误
用的Redis是windows版本,6.2.6 报错的主要信息如下: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method redisson threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect t…...

【C++11智能指针】
c智能指针 手动管理内存很容易造成内存泄漏,现代c的智能指针可以在很大程度上帮我们缓解这个问题,降低我们的手动管理内存的心智负担,智能指针有好几种,比如shared_ptr、unique_ptr还有weak_ptr 共享指针shared_ptr 共享指针会…...

如何实现Excel中多级数据联动
摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间的数据联动&…...

使用Pytest集成Allure生成漂亮的图形测试报告
目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架ÿ…...

opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)
矩特征(Moments Features)是用于图像分析和模式识别的一种特征表示方法,用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以…...

什么是CSS Grid布局?什么是Flexbox布局?它们两者有什么不同?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS Grid布局⭐ Flexbox布局⭐ 不同之处⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web…...
Centos中pip install mysqlclient失败
pip install mysqlclient 错误详情如下 pip install mysqlclient Looking in indexes: http://mirrors.tencentyun.com/pypi/simple Collecting mysqlclient Using cached http://mirrors.tencentyun.com/pypi/packages/de/9c/b176826e8994551ce826404dab97e305a4bb76c8b0a4e0…...

arcgis更改图层字段名脚本
话不多说,上脚本源码,复制黏贴即可 #-*- coding:utf-8 -*- __author__ lumen import arcpy #输入图层 InputFeature arcpy.GetParameterAsText(0) #原始字段 oldField arcpy.GetParameterAsText(1) # 获取原始字段类型 oldFieldType desc arcpy.…...
Android 13 MTK平台添加自定义按键,以及CTS问题解决
添加自定义按键流程 一般来说上层添加以下几处修改 驱动层的键值上报,让驱动处理好即可 frameworks / base/core/java/android/view/KeyEvent.java public static final int KEYCODE_DEMO_APP_4 = 304;/** add by songhui for fingerprint Key code */+ public static fina…...

深入了解 Postman Test 校验的使用方法
Postman 是一个广泛使用的 API 开发工具,它允许开发人员测试 API 的各个方面,包括请求、响应、身份验证等等,其中最常用的功能之一就是 Test 校验。那今天就一起来看看 Postman 的 Test 校验该如何使用。 Test 校验是什么? Test…...

岛屿的最大面积(力扣)递归 JAVA
给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。 岛屿的面积是岛上值为 1 的…...
使用swoole作为MQTT客户端并接收实现即时消息推送
环境准备 首先需要安装swoole 可以使用pecl进行安装 ,如 pecl install swool, 注意加上版本号 或者使用构建好的docker镜像,这里使用构建好的 zacksleo/php:7.1-alpine-fpm-swoole 镜像 使用 compose 安装依赖库 composer require jesusslim/mqttcl…...

Go基本语法——go语言中的四种变量定义方法
前言 在go语言中,定义一个变量有四种方式,本文单从语法的层面来介绍这几种方式 单变量定义方法 1.var 变量名 类型,不进行初始化 例如,定义一个变量a后为其赋值,并且打印其值,运行结果如下 //1.不进行…...
原型对象(Prototype)详解
原型对象(Prototype)详解 一、核心概念 本质:每个 JavaScript 对象(除 null 外)都有的内置属性作用:实现对象间的属性/方法继承(原型继承)存储位置:[[Prototype]] 内部属性(通过 __proto__ 或 Object.getPrototypeOf() 访问)二、关键特性图示 对象实例 (obj)│├─…...

Python训练打卡Day43
复习日 1.卷积神经网络的基本概念 2.kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 tips:注册kaggle的注意事项 安装插件:Header Editor 然后打开扩展选项: 输入网址:ht…...

Web3 借贷与清算机制全解析:链上金融的运行逻辑
Web3 借贷与清算机制全解析:链上金融的运行逻辑 超额抵押借款 例如,借款人用ETH为抵押借入DAI;借款人的ETH的价值一定是要超过DAI的价值;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步:借款人需要去提供一定…...
LLM基础2_语言模型如何文本编码
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 字节对编码(BPE) 上一篇博文说到 为什么GPT模型不需要[PAD]和[UNK]? GPT使用更先进的字节对编码(BPE),总能将词语拆分成已知子词 为什么需要BPE? 简…...
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
在使用PHP连接MySQL数据库时,可能会遇到连接失败和写锁问题。这类问题可能会影响应用的正常运行,本文将详细介绍排查和解决这些问题的方法。 一、PHP连接MySQL数据库失败 1. 排查连接失败的常见原因 数据库配置错误: 检查数据库主机、用户名…...

CAN通信收发测试(USB2CAN模块测试实验)
1.搭建测试环境 电脑:安装 USB 驱动,安装原厂调试工具,安装cangaroo(参考安装包的入门教程即可) USB驱动路径:~\CAN分析仪资料20230701_Linux\硬件驱动程序 原厂调试工具路径:~\CAN分析仪资料2…...

PDF转PPT转换方法总结
你是否遇到过这些场景? 收到客户发来的产品手册PDF,明天就要用它做演示; 公司历史资料只有PDF版,领导突然要求更新为幻灯片。 这时PDF转PPT工具就成了救命稻草。接下来,介绍三种PDF转PPT工具。 1. iLoveOFD在线转换…...

CentOS 7如何编译安装升级gcc至7.5版本?
CentOS 7如何编译安装升级gcc版本? 由于配置CentOS-SCLo-scl.repo与CentOS-SCLo-scl-rh.repo后执行yum install -y devtoolset-7安装总是异常,遂决定编译安装gcc7.5 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc…...