QT跨平台应用程序开发框架(1)—— 环境搭建

news2025/5/24 15:05:08

目录

一,关于QT

 二,关于应用程序框架

三,环境搭建

3.1 预备

3.2 下载Qt SDK

3.3 安装Qt SDK

 3.4 配置环境变量

3.5 认识一些重要工具

四,Qt Creator 的基本使用

4.1 创建项目 

4.2 代码解释


一,关于QT

  • 互联网核心岗位大致分为四种:开发,测试,运维,产品经理;开发又分为后端开发,前端开发,算法工程师,游戏开发等,前端开发还可以细分,比如网页端开发,桌面应用开发,移动应用开发
  • QT是用于进行客户端开发的,属于前端开发的桌面应用开发,又叫客户端开发
  • 准确来说,QT特指用来进行桌面应用开发所涉及到的一套计数,并且QT无法开发网页前端,也不能开发移动应用(目前官方也支持移动应用开发了,但是目前还没有知名的商用移动应用程序是QT开发的,就是不知道有没有人用)
  • 客户端开发的主要任务,就是编写和用户交互的界面,目前我们接触到的交互页面主要是两种:①命令行终端页面,比如cmd    ②图形化界面;前者适合专业人员用,后者适合普通用户,QT是用来编写桌面GUI程序的一套框架
  • 其实在Windows上编写GUI程序,也有很多解决方案,QT只是其中一种

 Windows下还有哪些方案可以开发GUI?

  • Windows API:windows提供原生 API来进行GUI开发,但是开发起开非常繁琐也非常原始,是最早期开发图形化界面的方式
  • MFC:是上世纪九十年代具有非常大影响力的一种GUI开发方法,与VC 6.0 一起极大促进了开发方式由原始到便捷的转变
  • QT也是在1991年左右诞生,和MFC不同,MFC早就停止更新了(寄了),QT直到现在仍在不停地更新和维护,仍然非常有生命力,并且能够跨平台,属于“六边形战士”
  • Windows Forms:微软给自家开发的 C# 量身定制地一套GUI开发体系
  • Electron:本质上是把 HTML 这样的网页,打包成 Windows 上运行的客户端程序,是最近几年比较热门的一种技术,最初是用来开发 “atom” 文本编辑器的(GitHub开发的,但是后来atom寄了,被微软的VSCode挤下去了);但是这个也有缺点,就是开发出来的程序,运行效率比较堪忧,比上面的都低很多

 二,关于应用程序框架

“框架”这个词在java中很常见,但是在C/C++中涉及的并不多,下面来介绍下什么是框架:

  • 框架本质是一群大佬发明出来方便底层程序员写代码的,一个东西越“自由”越“灵活”,就越容易出错,特别是对于我们程序猿来说,代码出错是最难受的了
  • 所以框架目的是为了限制程序员的自由,但是这并不是坏处,可以类比下没有红绿灯和有红绿灯的十字路口,框架能够减少程序员写代码出错的情况
  • 库和框架都是属于大佬们给全世界程序员的福利,库是被程序员调用的,框架则是“调用”程序员的,二者的主体地位不同,一般程序员配合框架,完善填充框架中流出的一些细节
  • 隔壁的 Java 更加依赖框架,比如Spring;而C/C++在代码编写上就比较自由

三,环境搭建

3.1 预备

QT开发环境,需要安装三个部分:

  • ①C++编译器(是编译器不是IDE,比如gcc,cl.exe等)
  • ②Qt SDK:SDK我们一般叫做软件开发工具包,里面包含了我们 进行 Qt 开发时要用到的各种工具,一般的Qt SDK 里面一般会内置C++编译器,一般建议用这个,如果要用曾经装VS时装的编译器可能还需要一些额外的配置,比较麻烦也容易出错
  • 需要有一个Qt的IDE,有很多,比如官方推荐的Qt Creator,是最容易入门也最容易上手的方式,并且不需要任何额外的配置(虽然这个IDE使用过程中有很多bug,但是整体来说还是挺方便的,适合初学者)
  • Visual Studio也可以进行Qt开发, 虽然功能更强但是需要更多额外的配置,上手较难,有些公司开发商业 Qt 程序的时候,可能会用到VS
  • Eclipse:本身是一个IDE平台,可以搭配不同的插件构成不同的IDE,也可以开发Qt,但是目前Eclipse市场份额受到的冲击很大,有更多的重量级(JetBrains)和轻量级工具(VSCode)来代替了

其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了 

3.2 下载Qt SDK

下载的官网网址为:https://download.qt.io/archive/qt/

 

 如果因为“众所周知”的原因导致上面的网站打不开或者下载很慢,需要 fq,并且不要做 wf 的行为哦,如果实在不行,可以尝试国内的镜像源:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

3.3 安装Qt SDK

安装的第一步点击next即可,然后会出现这个页面:

之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格

之后一路确认然后安装即可

 3.4 配置环境变量

先找到我们前面安装Qt时的目录,找到如下bin文件夹,复制路径添加到环境变量中即可:

配环境变量是为了:

  • 让OS或者Qt Creator 工具能够找到Qt SDK 中提供的 exe
  • 让Qt 程序运行的时候,能够找到对应的. dll 动态库 

3.5 认识一些重要工具

可以在开始菜单下找到这个:

都是自带的一些工具程序,也是我们在开发中需要关注的:

①Qt官方文档 

 

  • 我们后面在写一些Qt代码时,可以在这里查某个类某个API,支持直接搜索(是英文的,但是也有中文文档,但是是非官方的,可以自行搜索)
  • 然后后面使用的话,我们一般也不会去开始菜单再找,Qt Creator 里面有快捷方式,后面再介绍

②图形化界面设计工具

  •  Qt 设计师可以通过拖拽控件的方式来快速生成界面,后面会经常使用,搭配Qt Creator 来使用

③国际化工具 

 

  • 国际化就是:有时候我们写的程序是要和国际接轨,比如我们在国内设计时是中文的,但是到了国外需要变成英文等其它语言
  • 允许我们单独创建一个语言配置文件,把界面上需要用到的各种文字,都配置到文件中,并且提前把各种语言的翻译都搞进去,这样就可以起到“一键切换语言”的功能

 ④命令行工具

 

  • 目前绝大多数开发工具都有命令行程序,因为这算是“传统” 

⑤Qt IDE 

 

  • 这个就是我们后面学习和使用Qt的主要工具

四,Qt Creator 的基本使用

4.1 创建项目 

①首先是新建项目:

②然后选择应用程序模板:

③然后是项目路径和名称

④然后是选择构建项目系统:

  •  通过Qt写的程序,涉及到一系列的“元编程”技术,就是通过代码来生成代码
  • Qt框架会在编译的时候会自动调用一系列的生成工具,基于我们自己写的代码,生成一系列的其它C++代码,最终编译的代码,也是最后生成的这些代码
  • 我们选择qmake,是一个老牌的Qt构建工具;CMake并非Qt专属,很多开源项目都会使用CMake,我们Linux系列博客有过介绍;Qbs是新一代构建工具,但是实际上用的人不多,目前已不在维护

⑤下一步就是对部分文件名的编辑:

 

我们介绍下这个Base class:

 

  • 我们使用Qt Creator 创建项目,会自动生成一些代码出来,生成的代码就包含一个类
  • 此处就是要选择这个自动生成的类的父类是哪个,有三个常见选项
  • QMainWindow:是一个完整的应用程序窗口,包含菜单栏工具栏状态栏等
  • QWidget:表示一个控件,表示窗口上的一个具体的元素,比如输入框,按钮,下拉框等
  • QDialog:表示一个对话框
  • 我们最开始学的话选择第二个,这个属于最简单的那个,容易入手;然后后面的文件名我们目前用它默认的(这里生成的文件名是和类名关联的,这种关联不强制,但是推荐大家搞成一样的)

我们再介绍下form file:

  • Qt 中创建图形化界面的程序有两种方式:①直接通过 C++ 代码的方式创建界面    ②通过form file,以图形化的方式来创建界面
  • 如果勾选了这个选框,就可以使用Qt Designe 或者直接使用 Qt Creator 来编辑这个 UI 文件,从而以图形化的方式快速方便地生成图形界面

⑥然后是选择翻译文件

 

  • 这个我们暂时不管,因为这个是和国际化相关地,直接点下一步

⑦选择编译器 

  • 就是选择基于哪个编译器的 Qt SDK 来构建后续代码,这个和我们前面安装时有关,直接下一步  

⑧工程管理工具 

  •  这个功能就是字面意思,比如我们可以选择git,添加到码云上,选择none即可,无影响

上面这些步骤全部完成后点击完成,就把项目创建好了,里面会有一些预备代码,直接点击左下角绿色箭头,就可以先来感受下运行结果了:

4.2 代码解释

创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么

main.cpp 

  • main函数参数不多说了,Linux用过很多了,作用是读取命令行参数
  • 编写一个Qt的图形化界面程序,一定需要有 QApplication 对象
  • 然后就是widget对象,这个就是我们前面在创建项目的时候,填写的生成的类名;Widget 的父类就是QWidget
  • 所以上面代码的作用就是“创建一个控件对象,并显示出来”,这里的控件对象就是一个窗口
  •  后面的exec() 表示让程序执行起来,这个exec和Linux的那一系列exec函数不一样,Linux哪个表示“进程程序替换”,可以参考往期博客:Linux系统编程——进程控制_linux maincrtstartup-CSDN博客

widget.h 

 widget.cpp

widget.ui 

双击会直接切换到Qt Designer,然后打开ui文件,就会看到图形化的界面编辑器:

  • 此处约定的 xml 标签的含义,类似于之前 Linux 网络中的自定义应用层协议:计算机网络(五) —— 自定义协议简单网络程序-CSDN博客
  • Qt 中使用xml文件就是去描述程序的界面是啥样的,进一步的 qmake 会调用相关的工具,依据这个 xml 文件来生成一些 C++ 代码,从而把完整的界面构造出来

xxx.pro

 

然后,在这个目录的上级目录,有一个和我们项目目录并列的目录:

 

 

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

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

相关文章

【MySQL】基础架构分析

考察频率难度40%⭐⭐⭐⭐ 这道题在面试时的出现频率其实并不高,最起码对于笔者来说是没有遇到过。那为什么还是选择把这个问题作为 MySQL 八股文系列的第一个呢?其实原因也挺简单的,还是老规矩,先通过一个问题把整个知识框架来一…

【华为云开发者学堂】基于华为云 CodeArts CCE 开发微服务电商平台

实验目的 通过完成本实验,在 CodeArts 平台完成基于微服务的应用开发,构建和部署。 ● 理解微服务应用架构和微服务模块组件 ● 掌握 CCE 平台创建基于公共镜像的应用的操作 ● 掌握 CodeArts 平台编译构建微服务应用的操作 ● 掌握 CodeArts 平台部署微…

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中,我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话,请参考如下的链接来进行安装。 如何在 Linux&#xff0…

P10打卡——pytorch实现车牌识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 1.检查GPU from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datasets import torchvisio…

GitCode G-Star 光引计划终审前十名获奖项目公示

在技术的浩瀚星空中,GitCode 平台上的 G-Star 项目熠熠生辉。如今,“光引计划” 已圆满落幕,众多 G-Star 项目作者,一同分享项目在 GitCode 平台托管的宝贵体验,并深入挖掘平台的多样玩法。 众多投稿纷至沓来&#xf…

【pycharm】远程部署失败,查看日志

pycharm 远程部署失败,查看日志 远程一直失败,gateway超时会还知道拉取一份日志: 在./root 下 发现了崩溃日志,启动崩溃了,导致backend一直无法启动。win11就是一直在connect到ubuntu的后端pycharm。。gateway 拉取的日志 我上传的linux版本的pycharm暂时存在dist目录下,…

浅谈云计算02 | 云计算模式的演进

云计算计算模式的演进 一、云计算计算模式的起源追溯1.2 个人计算机与桌面计算 二、云计算计算模式的发展阶段2.1 效用计算的出现2.2 客户机/服务器模式2.3 集群计算2.4 服务计算2.5 分布式计算2.6 网格计算 三、云计算计算模式的成熟与多元化3.1 主流云计算服务模式的确立3.1.…

Vue 学习之旅:从基础到实践(vue快速上手+插值表达式+指令上)

Vue 学习之旅:从基础到实践 文章目录 Vue 学习之旅:从基础到实践一、Vue 简介二、创建 Vue 实例与插值表达式(一)创建 Vue 实例步骤(二)插值表达式 三、Vue 核心特性 - 响应式四、Vue 指令(一&a…

PMP–一、二、三模、冲刺–分类–7.成本管理

文章目录 技巧一模7.成本管理--4.控制成本--数据分析--挣值分析--进度绩效指数(SPI)是测量进度效率的一种指标,表示为挣值与计划价值之比,反映了项目团队完成工作的效率。 当 SPI小于 1.0 时,说明已完成的工作量未达到…

字符串 (算法十一)

简介 没有固定题型&#xff0c;内容很杂&#xff0c;可以学习下string接口与相关操作 1.最长公共前缀 link&#xff1a; 解法一&#xff1a;两两比较 code class Solution { public:string longestCommonPrefix(vector<string>& strs) {// 两两比较string ans …

摄像头模块在狩猎相机中的应用

摄像头模块是狩猎相机的核心组件&#xff0c;在狩猎相机中发挥着关键作用&#xff0c;以下是其主要应用&#xff1a; 图像与视频拍摄 高清成像&#xff1a;高像素的摄像头模块可确保狩猎相机拍摄出清晰的图像和视频&#xff0c;能够捕捉到动物的毛发纹理、行为细节及周围环境的…

给DevOps加点料:融入安全性的DevSecOps

从前&#xff0c;安全防护只是特定团队的责任&#xff0c;在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时&#xff0c;这样做没什么问题&#xff1b;但是现在&#xff0c;这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期&#xff08;有时…

沸点 | 聚焦嬴图Cloud V2.1:具备水平可扩展性+深度计算的云原生嬴图动力站!

近日&#xff0c;嬴图正式推出嬴图Cloud V2.1&#xff0c;此次发布专注于提供无与伦比的用户体验&#xff0c;包括具有水平可扩展性的嬴图Powerhouse的一键部署、具有灵活定制功能的管理控制台、VPC / 专用链接等&#xff0c;旨在满足用户不断变化需求的各项前沿功能&#xff0…

Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)

MySQL是一个多存储引擎的数据库管理系统&#xff0c;支持多种不同的存储引擎。每种存储引擎都有其独特的特性、优势和适用场景。选择合适的存储引擎对于优化数据库性能、确保数据完整性和满足业务需求至关重要。 注&#xff1a;在同一个Mysql的数据库中&#xff0c;对于不同的表…

springboot高校电子图书馆的大数据平台规划与设计

Spring Boot高校电子图书馆的大数据平台规划与设计是一个综合性的项目&#xff0c;旨在利用现代信息技术提升高校电子图书馆的服务质量和管理效率。以下是对该项目的详细介绍&#xff1a; 一、背景与需求 随着高校教育信息化的不断推进&#xff0c;电子图书馆的资源和用户数量…

lwip单网卡多ip的实现

1、今天要实现lwip的多个ip配置&#xff0c;本来以为需要自己修改很多核心代码 2、查阅资料才发现&#xff0c;lwip已经把接口留出来了 /** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) * to a filter function that returns the correct neti…

《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题

《零基础Go语言算法实战》 【题目 2-22】Go 调度器优先调度问题 下面代码的输出是什么&#xff1f;请说明原因。 package main import ( "fmt" "runtime" "sync" ) func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10)…

浏览器输入http形式网址后自动跳转https解决方法

一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况&#xff1a; 在浏览器中输入“http域名”后会自动变成“https 域名”的形式&#xff0c;此时“https 域名”的网站可能已停止对外提供服务了&#xff0c;这时会出现如下不友好的网页提示&#xff1a; 二、处理方法&#x…

【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用

目录 步骤 一、搭建基本同步框架 二、添加委托 三、添加蓝图互动框架 四、修改为异步框架 完整代码 通过一个游戏初始化流程的示例来介绍“ControlFlows”的基本使用。 步骤 一、搭建基本同步框架 1. 勾选“ControlFlows”插件 2. 新建一个空白C类&#xff0c;这里…

WeakAuras NES Script(lua)

WeakAuras NES Script 修星脚本字符串 脚本1&#xff1a;NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…