C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用

news2024/11/25 22:44:15

文章目录

  • 创建一个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控件示例。

创建项目

  1. 选择“文件”>“新建文件或项目”>“应用程序”>“Qt Quick应用程序-滑动”>“选择”。
  2. 在“名称”字段中输入应用程序的名称。
  3. 在“创建位置”字段中输入项目文件的路径,然后选择“下一步”(或在macOS上选择“继续”)。
  4. 在“构建系统”字段中,选择要用于构建和运行项目的构建系统:qmake、CMake或Qbs。
  5. 在“Qt Quick控件样式”字段中,选择要使用的预定义UI样式之一,然后选择“下一步”。
  6. 选择要为其构建应用程序的平台的工具集。要构建适用于移动设备的应用程序,请选择Android ARM和iPhone OS的工具集,然后单击“下一步”。

注意:如果已在“工具”>“选项”>“工具集”(Windows和Linux)或“Qt
Creator”>“首选项”>“工具集”(macOS)中指定了工具集,则会列出工具集。

  1. 选择“下一步”。
  2. 查看项目设置,然后单击“完成”(或在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类型。

  1. 在Projects视图中,双击打开Page1Form.ui.qml文件以在设计模式下编辑。
    在这里插入图片描述

  2. 在导航器中,选择Label并按Delete键删除它。

  3. 在导航器中选择Page,并在Id字段中输入page。

  4. 在Library > Resources中,选择qt-logo.png并将其拖放到导航器中的页面上。
    在这里插入图片描述
    a. 在Id字段中输入icon。
    b. 在Position字段中,将X设置为10,Y设置为20。

  5. 在Projects视图中右键单击资源文件qml.qrc,并选择Add Existing File将qt-logo.png添加到用于部署的资源文件中。

  6. 将一个Rectangle拖放到导航器中的页面上,并编辑其属性。
    在这里插入图片描述
    a. 在Id字段中输入topLeftRect。
    b. 在Size字段中,将W设置为55,H设置为41,使矩形大小与图像大小相匹配。
    c. 在Color字段中,点击(透明)按钮使矩形透明。
    d. 在Border color字段中,将边框颜色设置为#808080。
    e. 点击Layout,然后点击(Top)和(Left)锚定按钮将矩形锚定到页面的左上角。
    f. 在Margin字段中,为顶部锚点选择20,为左侧锚点选择10。
    在这里插入图片描述

  7. 从库中将Mouse Area类型拖放到导航器中的topLeftRect上。

  8. 点击Layout,然后点击在这里插入图片描述
    (Fill to Parent)按钮将鼠标区域锚定到矩形上。

  9. 在导航器中,通过按Ctrl+C复制topLeftRect,并按Ctrl+V将其粘贴到页面上两次。Qt Creator会将新实例命名为topLeftRect1和topLeftRect2。

  10. 选择topLeftRect1并编辑其属性:
    a. 在Id字段中输入middleRightRect。
    b. 在Layout中,选择在这里插入图片描述
    (垂直居中锚定按钮),然后选择在这里插入图片描述
    (右侧)锚定按钮将矩形锚定到其父级的中右边距。
    c. 在Margin字段中,为右侧锚点选择10,为垂直居中锚点选择0。

  11. 选择topLeftRect2并编辑其属性:
    a. 在Id字段中输入bottomLeftRect。
    b. 在Layout中,选择在这里插入图片描述
    (底部)和在这里插入图片描述
    (左侧)锚定按钮将矩形锚定到其父级的左下边距。
    c. 在Margin字段中,为底部锚点选择20,为左侧锚点选择10。

  12. 在导航器中,选择每个类型的在这里插入图片描述
    (导出)按钮以将所有类型导出为属性。这使可以在main.qml文件中使用这些属性。

  13. 按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 引用它们。\

  1. 将窗口大小和背景颜色指定为 ApplicationWindow 类型的属性:

    ApplicationWindow {
        visible: true
        width: 640
        height: 480
        title: qsTr("Tabs")
    
  2. 为 Page1 类型指定一个 id,以便能够使用在 Page1Form.ui.qml 中导出的属性:

    SwipeView {
        id: swipeView
        anchors.fill: parent
        currentIndex: tabBar.currentIndex
    
        Page1Form {
            id: page
    
  3. 在 mouseArea 中添加一个指向点击表达式的指针:

    	mouseArea {
    	onClicked: stateGroup.state = ' '
    	}
    
  4. 该表达式将状态设置为基本状态,并将图像返回到初始位置。
    在 mouseArea1 中添加一个指向点击表达式的指针,将状态设置为 State1:

    	mouseArea1 {
    	onClicked: stateGroup.state = 'State1'
    	}
    
  5. 在 mouseArea2 中添加一个指向点击表达式的指针,将状态设置为 State2:

        mouseArea2 {
        onClicked: stateGroup.state = 'State2'
        }
    }
    
  6. 将 Qt 标志的位置绑定到矩形,以确保在不同大小的屏幕上缩放视图时,标志显示在矩形内部。设置 x 和 y 属性的表达式,如下面的代码片段所示:

      StateGroup {
          id: stateGroup
          states: [
              State {
                  name: "State1"
    
                  PropertyChanges {
                      target: page.icon
                      x: page.middleRightRect.x
                      y: page.middleRightRect.y
                  }
              },
              State {
                  name: "State2"
    
                  PropertyChanges {
                      target: page.icon
                      x: page.bottomLeftRect.x
                      y: page.bottomLeftRect.y
                  }
              }
          ]
    
  7. 按 Ctrl+R 运行应用程序。
    点击矩形以将 Qt 标志从一个矩形移动到另一个矩形。

为视图添加动画

在状态组内添加过渡以定义当Qt标志在状态之间移动时属性如何变化。这些过渡将动画应用于Qt标志。例如,当它移动到middleRightRect时,Qt标志会反弹回来,并平稳地进入bottomLeftRect。

  1. 在文本编辑器中,添加以下代码以指定当移动到State1时,Qt标志的x和y坐标在线性时间内变化1秒钟:

      transitions: [
          Transition {
              from: "*"; to: "State1"
              NumberAnimation {
                  easing.type: Easing.OutBounce
                  properties: "x,y";
                  duration: 1000
              }
          },
    
  2. 可以使用Qt Quick工具栏中的动画功能将缓动曲线类型从线性更改为OutBounce:
    a. 在文本编辑器中单击NumberAnimation以显示在这里插入图片描述
    图标,然后单击该图标以打开工具栏:
    在这里插入图片描述
    b. 在Easing字段中,选择Bounce。
    c. 在Subtype字段中,选择Out。

  3. 添加以下代码以指定当移动到State2时,Qt标志的x和y坐标在2秒钟内变化,并且使用InOutQuad缓动函数:

      ...
              Transition {
                  from: "*"; to: "State2"
                  NumberAnimation {
                          properties: "x,y";
                          easing.type: Easing.InOutQuad;
                          duration: 2000
                  }
              },
    
  4. 添加以下代码以指定对于任何其他状态变化,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应用

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

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

相关文章

约束综合中的逻辑互斥时钟(Logically Exclusive Clocks)

注:本文翻译自Constraining Logically Exclusive Clocks in Synthesis 逻辑互斥时钟的定义 逻辑互斥时钟是指设计中活跃(activate)但不彼此影响的时钟。常见的情况是,两个时钟作为一个多路选择器的输入,并根据sel信号…

【人工智能前沿弄潮】——生成式AI系列:Diffusers应用 (2) 训练扩散模型(无条件图像生成)

无条件图像生成是扩散模型的一种流行应用,它生成的图像看起来像用于训练的数据集中的图像。与文本或图像到图像模型不同,无条件图像生成不依赖于任何文本或图像。它只生成与其训练数据分布相似的图像。通常,通过在特定数据集上微调预训练模型…

Idea报错:Cannot resolve symbol “springframework“以及各种依赖包

问题描述: Idea导入了maven项目之后出现报错Cannot resolve symbol “springframework” ,识别不了这个标识或者找不到这个包,明明这些依赖和包都有就是出现报错,并且运行按钮变成灰色 解决办法: 其实这个原因大概率就…

React构建的JS优化思路

背景 之前个人博客搭建时,发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M,对于个人博客服务器的带宽来说,压力较大,因此耗费了5S的时间 优化思路 解决React生成的JS大小,因为我用的是react-router-dom…

从源码Debug深入spring事件机制,基于观察者模式仿写spring事件监听骨架

文章目录 1.测试案例2.DEBUG源码分析3. 异步监听4.ApplicationListener子接口5. 注解支持6. 基于观察者模式高仿spring事件监听6.1 先定义自定义一个事件6.2 定义两个监听器6.3 定义一个持有所有监听器的对象,类似spring的SimpleApplicationEventMulticaster6.4 事件…

全面解析 Axios 请求库的基本使用方法

Axios 是一个流行的基于 Promise 的 HTTP 请求库,用于在浏览器和 Node.js 中进行 HTTP 请求。它提供了简单易用的 API,可以发送各种类型的请求(如 GET、POST、PUT、DELETE等),并处理响应数据,Axios 在前端工…

Java——线程睡眠全方位解析

线程睡眠的方法: 在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可…

七牛云如何绑定自定义域名-小白操作说明——七牛云对象储存kodo

七牛云如何绑定自定义域名 **温馨提示:使用加速cdn自定义域名是必须要https的,也就是必须ssl证书,否则类似视频mp4 之类会无法使用。 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 点击首页——…

Android12之MediaCodec用法套路(三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

动态链接(8/11)

静态链接的缺点:生成的可执行文件体积较大,当多个程序引用相同的公共代码时,这些公共代码会多次加载到内存,浪费内存资源。 为了解决这个问题,动态链接对静态链接做了一些优化:对一些公用的代码&#xff0…

邻接表创建无向表(C++ 代码)

#include<iostream>//邻接表创建无向表 #define MVNum 100 using namespace std; typedef char VerTexType; typedef struct Arcnode//边节点 {int adjvex;//该边所指向的顶点的位置struct Arcnode* nextarc;//指向下一条边的指针 }Arcnode; typedef struct vnode//顶点节…

【数据结构】二叉树篇| 纲领思路02+刷题

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 所谓自由&#xff0c;不是随心所欲&#xff0c;而是自我主宰。——康德 目录 一、前言二、刷题1、翻转二叉树 2、二叉树的层序遍历✨3、 二…

SpringMVC 详细教程及源码讲解

目录 一、SpringMVC简介1. 什么是MVC&#xff1f;2.什么是SpringMVC?3.SpringMVC的特点&#xff1f; 二、SpringMVC入门案列1. 开发环境2. 创建Maven工程2.1 添加web模块2.2 引入依赖 3. 配置web.xml3.1 默认配置方式3.2 扩展配置方式 4.创建请求控制器5. 创建SpringMVC的配置…

基于ChatGLM的Deepin文档问答Bot

一、背景介绍 题目来源&#xff1a;2023全国大学生计算机系统能力大赛操作系统设计赛-功能挑战赛题目地址&#xff1a;proj225-document-question-answering-bot题目描述&#xff1a;https://wiki.deepin.org 上有900多条deepin系统相关的中文教程和词条&#xff0c;请编写能根…

【第358场周赛】翻倍以链表形式表示的数字,Java解密。

LeetCode 第358场周赛 恒生专场。 文章目录 剑指Offer:翻倍以链表形式表示的数字示例:限制:解题思路:剑指Offer:翻倍以链表形式表示的数字 【题目描述】 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。 将链表 翻倍 后,返回头节点 head 。 示例…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

第四课 学习动词短语

文章目录 前言动词短语动副词组及物动副词组实义动词副词介词动宾词组固定特殊可分开动词短语时态变化规则 一、动副词组1、go ahead 先走&#xff0c;进行 不及物go along 前进&#xff0c;向前走&#xff0c;与....一道去go away 走开&#xff0c;离去&#xff0c;逃走&#…

全网最全的接口自动化测试教程

为什么要做接口自动化 相对于UI自动化而言&#xff0c;接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验&#xff0c;APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化&#xff0c;导致自动化的代码频繁变更&#xff0c;没有起到减少工作量的效果。 而…

用友 U8 CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

RK3399平台开发系列讲解(入门篇)Linux内核常见的规则

🚀返回专栏总目录 文章目录 一、编码风格二、内核结构分配和初始化三、面向对象的思想沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在内核代码的演化过程中应该遵守标准规则 一、编码风格 参考一下内核编码风格手册,它位于内核源代码树的 Documentat…