Qt 总结

由于工作需要用到Qt。把过程中学习到的东西记录下来,希望能帮到他人和将来的自己。

由于需要快速实现需求,所以对Qt只是使用,并没有对原理的深入理解。

故此文只适合入门,不适合深入学习Qt。


文章目录

        • 安装&维护
        • 示例&教程
        • 构建系统
        • 编译套件
        • Qt命令行环境
        • 半自动的内存管理
        • 信号槽机制
        • GUI图形界面开发
        • 打包
        • 帮助文档

安装&维护
  • 在线安装器

    • 在qt官网下载

    • 选择组件,注意选择qt的版本和编译器的版本,以及ide(qt creator)。

    • lts版本较稳定。社区版的lts版本有6.2.4,5.15.2

  • 维护工具

    • 位置在qt的安装目录

    • 日后可随意增删改组件

  • 附注: 使用国内镜像源加速

    • 用命令行启动在线安装器或维护工具,并加上命令行参数–mirror https://mirror.nju.edu.cn/qt
示例&教程
  • 在qt creator的欢迎界面
构建系统
  • qmake/cmake
  • 要使用某个模块,要先在cmake/qmake中添加
  • 把 头文件/源文件/资源文件/界面文件 添加到项目中
编译套件
  • windows上有mingw/msvc等
Qt命令行环境
  • 功能:打包、测试、预览图形界面等

  • 位置:开始菜单->所有应用->Qt-> Qt x.x.xx(xx.xx.xx)

半自动的内存管理
  • 继承自QObject/QWidget的对象。可以设置父对象。所有对象可以组成一个或若干个对象树。根对象被回收时它的子孙对象会自动被回收。

  • 附:c++的其他内存管理方式:raii等。

信号槽机制
  • 观察者模式
  • 是QObject的子孙且包含Q_OBJECT宏的类,可以声明信号或槽
  • 信号:用singls宏声明,只有声明没有实现
  • 槽:用slots宏声明,有实现
  • 例子:
	//对象1发出信号1时,对象2的信号2/槽2会被触发QObject::connect( 对象1, 信号1, 对象2, 信号2/槽2 )
​	
​	//对象1发出信号1时,lambda表达式会被触发
​	QObject::connect( 对象1, 信号1,  lambda表达式 )//手动发射信号emit 对象.信号名()
GUI图形界面开发
  • 界面开发方式

    • widgets-based
      • 直接new控件
      • ui文件
    • qt quick
      • 程序执行时用js引擎解析qml文件,边执行边解析渲染

      • note: 如果使用cmake,图片要添加到 cmake

      • 事件处理

        • connect、on信号名首字母大写
      • 组件,参考:

        • qt quick 核心编程 第7章
        • qml 组件 https://blog.csdn.net/kenfan1647/article/details/120546294
        • qml 自定义控件 https://blog.csdn.net/u013718730/article/details/104160498
        • qml 自定义类型 https://blog.csdn.net/beibeix2015/article/details/111991060
      • qml与c++交互

        • 此文写的很细致适合入门:https://blog.csdn.net/xiezhongyuan07/article/details/109245920
        • 此文总结的很全面:https://blog.csdn.net/xiezhongyuan07/article/details/109318209
        • 这是demo:https://gitee.com/xx2211/projects
        • 这是进阶demo
          • cpp中使用qml https://blog.csdn.net/bureau123/article/details/124454536
          • qml中使用cpp https://blog.csdn.net/bureau123/article/details/124378214
  • 窗口坐标系

    • 左上为原点,向右为x正方向,向下为y正方向
  • view & model

    • view显示数据的容器 model存储数据 delegate定义显示方式
  • 自定义控件(widget)

    • 继承Qt控件,修改外观、布局、添加子控件等。
    • ui设计器中使用自定义控件,先使用基本控件,再“提升为”自定义控件
  • dpi, pointSize, pixeSize

    • pointSize自适应,pixelSize像素单位
打包
  • windeployqt命令,有时需要手动替换依赖
  • 打包成一个文件:可以使用enigma virtual box工具,但可能有许可争议
  • 验证打包是否成功:可以在sandbox中尝试运行
帮助文档
  • 工具栏->帮助->索引
  • 在线文档 https://doc.qt.io/ https://doc.qt.io/all-topics.html
  • 第三方qml教程 https://blog.csdn.net/bureau123/category_11712436.html
  • 第三方qt教程 https://blog.csdn.net/bureau123/category_10691949.html

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

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

相关文章

案例:非功能性需求的设计

在咨询中看到很多项目组对于非功能性需求没有做设计,很多项目组在设计文档中仅仅是把非功能性需求的描述拷贝到设计文档的非功能性章节。因此特地设计了两个简单的需求给大家参考,希望能够引导设计人员重视非功能性需求的设计。

视觉大模型--deter的深入理解

但对于transformer用于目标检测领域的开创性模型,该模型言简意赅,但是但从论文理解,有很多细节都不清楚,尤其是解码器的query和二分图匹配(Bipartite Matching)和匈牙利算法(Hungarian Algorithm)相关,本文将根据代码详…

32. UE5 RPG使用增强输入激活GameplayAbility(二)

在上一篇文章中,我们实现了Tag和InputAction的数据对应,后面,我们会通过InputAction触发对应的Tag,然后在GameplayAbility身上设置对应的Tag,然后通过Tag遍历角色身上的所有应用的技能去激活。为了实现这个功能&#x…

P8597 [蓝桥杯 2013 省 B] 翻硬币

# [蓝桥杯 2013 省 B] 翻硬币 ## 题目背景 小明正在玩一个“翻硬币”的游戏。 ## 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo&#x…

【C++基础】std::vector详解

std::vector 是 C 标准库中的一个容器,提供了动态数组的功能。它的底层实现通常是使用连续的内存块来存储元素,因此可以通过指针算术来访问元素,并且支持常数时间的随机访问,并支持在容器末尾高效地添加和删除元素。 一、底层实现…

精读 Generating Mammography Reports from Multi-view Mammograms with BERT

精读(非常推荐) Generating Mammography Reports from Multi-view Mammograms with BERT(上) 这里的作者有个叫 Ilya 的吓坏我了 1. Abstract Writing mammography reports can be errorprone and time-consuming for radiolog…

基于单片机的数字万用表设计

**单片机设计介绍,基于单片机的数字万用表设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的数字万用表设计概要是关于使用单片机技术来实现数字万用表功能的一种设计方案。下面将详细概述该设计的各个…

从零学算法80

80. 删除有序数组中的重复项 II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外…

【性能测试】接口测试各知识第2篇:学习目标,1. 理解接口的概念【附代码文档】

接口测试完整教程(附代码资料)主要内容讲述:接口测试,学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标,RESTFUL1. 理解接口的概念,2.什么是接口测试…

ChatGPT 的行家指南

原文:An Insider’s Guide to using ChatGPT 译者:飞龙 协议:CC BY-NC-SA 4.0 介绍 你是否厌倦了花费无数小时为你的业务创建内容?从博客文章到社交媒体更新,从电子书内容到电子邮件,这可能是一个耗时的过…

Kafka面试宝典

1 Kafka基础面试篇 Kafka的那些设计让它有如此高的性能? 1.partition,producer和consumer端的批处理:提高并行度;2.页缓存:大量使用页缓存,内存操作比磁盘操作快很多,数据写入直接写道页缓存,由操作系统负责刷盘,数据读取也是直接命中页缓存,从内存中直接拿到数据;…

如何保持数据一致性

如何保持数据一致性 数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。 问题描述: 1.在高并发的场景中,针对同一个…

基于java+SpringBoot+Vue的学生心理咨询评估系统设计与实现

基于javaSpringBootVue的学生心理咨询评估系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 后台展示 用户管理模块:管理员可以查看、添加、编辑和删除用户信息。 试题管理模块&#xff1a…

Qt + VS2017 创建一个简单的图片加载应用程序

简介: 本文介绍了如何使用Qt创建一个简单的图片加载应用程序。该应用程序可以打开图片文件并在界面上显示选定的图片,并保存用户上次选择的图片路径。 1. 创建项目: 首先,在VS中创建一个新的Qt Widgets应用程序项目,并…

LeetCode 1379.找出克隆二叉树中的相同节点:二叉树遍历

【LetMeFly】1379.找出克隆二叉树中的相同节点:二叉树遍历 力扣题目链接:https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/ 给你两棵二叉树,原始树 original 和克隆树 cloned&#xff0…

Golang | Leetcode Golang题解之第3题无重复字符的最长子串

题目: 题解: func lengthOfLongestSubstring(s string) int {// 哈希集合,记录每个字符是否出现过m : map[byte]int{}n : len(s)// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动r…

Linux初学(十二)AWK进阶

一、AWK 1.1 简介 AWK是Linux中重要的文本处理工具Linux三剑客只一处理的对象可以是一个具体的文件,也可以是一个命令的执行结果AWK按行读取文件,将每一行视为一条记录 案例一:获取系统中每个用户的uid 方法一:cat /etc/passwd |…

vue3+threejs新手从零开发卡牌游戏(二十五):尾声(附完整源码下载地址)

这个demo到这里就算接近尾声了,大体的游戏框架就算搭建完成了,主要是提供了一下思路,代码也是来来回回修改了好几次,也踩了一些坑,后续可以自行优化一些战斗效果和交互逻辑、UI美化等,这里附上源码下载链接…

CMD 命令行进入到电脑硬盘的某个目录的几种方式

本文介绍几种 cmd 命令行进入到电脑硬盘的某个目录的几种方式。 1、在具体文件目录地址栏输入 cmd 回车 这是最快的、最牛的方式,没有之一。 比如:我想进入一个层级很深的文件目录,直接打开在那个目录,把地址栏信息删除清空&am…

FLink学习(三)-DataStream

一、DataStream 1&#xff0c;支持序列化的类型有 基本类型&#xff0c;即 String、Long、Integer、Boolean、Array复合类型&#xff1a;Tuples、POJOs 和 Scala case classes Tuples Flink 自带有 Tuple0 到 Tuple25 类型 Tuple2<String, Integer> person Tuple2.…