【初识Qt】如何使用QtCreator创建项目

news2025/2/25 9:49:14

文章目录

  • 1 :peach:Qt Creator 概览:peach:
  • 2 :peach:使⽤ Qt Creator 新建项目:peach:
    • 2.1 :apple:新建项目:apple:
    • 2.2 :apple:使用标签实现 Hello World 程序:apple:
      • 2.2.1 :lemon:纯代码方式实现:lemon:
      • 2.2.2 :lemon:可视化操作实现:lemon:
    • 2.3 :apple:使用按钮实现 Hello World 程序:apple:
      • 2.3.1 :lemon:纯代码方式实现:lemon:
      • 2.3.2 :lemon:可视化操作实现:lemon:
      • 2.3.3 :lemon:对比可视化以及纯代码操作:lemon:


1 🍑Qt Creator 概览🍑

从 开始菜单 或者 快捷⽅式 打开 Qt Creator 集成开发环境,启动之后看到类似下⾯的界⾯:
在这里插入图片描述

  • 1️⃣:菜单栏。菜单栏⼀共有 8 个菜单选项,包含了常⽤的功能菜单:
⽂件包含了新建、打开、关闭项⽬和⽂件、打印和退出等基本功能
编辑包含了撤销、剪切、复制、查找和选择编码等功能
构建包含构建和运⾏项⽬等相关功能。
调试包含调试运⾏项⽬等相关功能。
Analyze包含 QML 分析器、Valgrind 内存和功能分析器等相关功能。
⼯具提供了快速定位菜单、外部⼯具菜单等。这⾥的选项菜单中包含了 Qt Creator 各个⽅⾯的设置选项:环境设置、⽂本编辑器设置、帮助设置、构建和运⾏设置、调试器设置和版本控制设置等。
控件包含了设置窗⼝布局的⼀些菜单,如全屏显⽰和隐藏边栏功能等。
帮助包含 Qt 帮助、Qt Creator 版本信息、报告bug和插件管理等菜单。
  • 2️⃣:模式选择
欢迎模式主要提供了⼀些功能的快捷⼊⼝,如打开帮助教程、打开⽰例程序、打开项⽬、新建项⽬、快速打开以前的项⽬和会话、联⽹查看 Qt 官⽅论坛和博客等。⽰例⻚⾯显⽰了 Qt ⾃带的⼤量⽰例程序,并提供了搜索栏从⽽实现快速查找;教程⻚⾯提供了⼀些视频教程资源,但是是英⽂的。
编辑模式主要⽤来查看和编辑程序代码,管理项⽬⽂件。Qt Creator 中的编辑器具有关键字特殊颜⾊显⽰、代码⾃动补全、声明定义间快捷切换、函数原型提⽰、F1 键快速打开相关帮助和全项⽬中进⾏查找等功能。也可以在 "⼯具---->选项 " 菜单中对编辑器进⾏设置。
设计模式整合了 Qt Designer 的功能。可以设计图形界⾯,进⾏部件属性设置、信号和槽设置、布局设置等操作。
调试模式⽀持设置断点、单步调试和远程调试等功能,包含局部变量和监视器、断点、线程以及快照等查看窗⼝。
项⽬模式包含对特定项⽬的构建设置、运⾏设置、编辑器设置、代码⻛格设置和依赖关系等⻚⾯。构建设置中可以对项⽬的版本、使⽤的Qt版本和编译步骤进⾏设置;编辑器设置中可以设置⽂件的默认编码;在代码⻛格设置中可以设置⾃⼰的代码⻛格。
帮助模式在帮助模式中将 Qt 助⼿整合了进来,包含⽬录、索引、查找和书签等⼏个导航模式,可以在帮助中查看 Qt 和 Qt Creator 的各⽅⾯信息。
  • 3️⃣:构建套件选择器。构建套件选择器包含了⽬标选择器(Target selector)、运⾏按钮(Run)、调试按钮(Debug)和构建按钮(Building)四个图标:
⽬标选择器⽬标选择器⽤来选择要构建哪个项⽬、使⽤哪个 Qt 库、这对于多个 Qt 库的项⽬很有⽤。还可以选择编译项⽬的 debug 版本或是 release 版本。
运⾏按钮运⾏按钮可以实现项⽬的构建和运⾏。
调试按钮运⾏按钮可以实现项⽬的调试。
构建按钮构建按钮完成项⽬的构建。

上面这些并不需要大家立马能够记住,而是有一个大致的印象,等到用多了之后自然就记住怎样使用了。


2 🍑使⽤ Qt Creator 新建项目🍑

2.1 🍎新建项目🍎

打开 Qt Creator ,在菜单栏中选中: “⽂件” --------> “新建⽂件或项⽬” ;或者使⽤快捷键:Ctrl +n;或者直接点击:“new”。
在这里插入图片描述

然后会弹出如下对话框:
在这里插入图片描述

新建项⽬对话框⾥有五类项⽬模板:

项⽬模板说明
ApplicationQt 应⽤程序,包括普通窗体程序和 QtQuick 程序
Library可以创建动态库、静态库以及 Qt Quick 扩展插件、QtCreator ⾃⾝插件
其他项⽬可以创建单元测试项⽬、Qt4 设计师⾃定义控件、⼦⽬录项⽬等
Non-Qt-Project⾮ Qt 项⽬,可以创建纯 C 或纯 C++ 项⽬
Import Project导⼊项⽬,从版本控制系统管理的软件项⽬导⼊旧的项⽬

常⽤的只有第⼀类 Application,选择它在右侧会看到 Qt 应⽤程序的五个⼦模板:

  • Qt Widgets Application:普通窗体模板,传统基于部件的窗体界⾯程序。
  • Qt Console Application:Qt 控制台应⽤程序。因为 Qt 主要⽤于图形界⾯设计,这个控制台项⽬模板基本不⽤。
  • Qt for Python:在Python下⽤ LGPL 的许可来开发闭源 Qt 软件。
  • Qt Quick Application: Qt 提供的⼀种⾼级⽤⼾界⾯技术,使⽤它可以⽅便快速的为移动以及嵌⼊式设备开发流畅美观的⽤⼾界⾯。Qt Quick 模块是开发 QML 应⽤的标准库,提供了使⽤ QML 创建⽤⼾界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒⼦效果以及着⾊效果等。

💡 选择不同的项⽬模板, Qt Creator 就会在后续项⽬创建好了之后⽣成不同的基础代码。

给Qt项⽬命名及选择保存项⽬的路径:
在这里插入图片描述

💡 注意:创建路径中不能够带中文。

选择 Qt 项⽬的构建系统,使⽤默认的 qmake 即可。
在这里插入图片描述
Qt 中的构建⼯具有三种可供选择,分别是:qmake、CMake、Qbs,下⾯依次介绍。

  • qmake: qmake 是⼀个构建⼯具(build tool),⽤于⾃动⽣成 makefile ⽂件。qmake ⽀持跨平台构建。qmake 编辑的是⼀个后缀名为 .pro 的⽂件。
  • CMake:CMake 是⼀个跨平台的构建⼯具。CMake 本⾝不是⼀个编译器,其实就是⽣成⼀个让编译器能读懂编译流程的⽂件⼯具。让 CMake ⾃动⽣成构建系统,例如 Makefile 和 Visual Studio项⽬⽂件。CMake 是⼀个第三⽅⼯具,有⾃⼰的⽂档。
  • Qbs:Qbs(Qt Build Suite:Qt构建套件)同 qmake、CMake ⼀样都是构建⼯具。Qbs 号称是新⼀代的构建⼯具,⽐ qmake 编译速度更快。Qbs 没有绑定 Qt 版本,它从项⽬⽂件的⾼级项⽬描述中⽣成⼀个正确的依赖表。⽽传统的 MakeFile ⽣成⼯具如 qmake 和 CMake ,其在⽣成 MakeFile⽂件后将实际的命令交给 Make ⼯具去执⾏。

💡 Qt 官⽅声明,因市场原因,弃⽤ Qbs 。对于 Qt ⽤⼾来说,qmake 是当前使⽤最⼴泛的构建⼯具,CMake 其次。

填写类信息设置界⾯:
在这里插入图片描述
对于基类的选择,⽬前有三种基类:

  • QMainWindow:主窗⼝类,⼀般⽤于较为复杂的应⽤程序,除了中央客⼾区界⾯,还包括菜单栏、⼯具栏、状态栏以及多个可停靠的⼯具对话框等。
  • QWidget:最简单、最基本的窗体程序,⾥⾯可以放置多个控件实现程序功能。
  • QDialog:基于对话框的程序,对话框⼀般⽤于弹窗,也可以⽤于主界⾯显⽰。对话框是从QWidget继承⽽来的,并丰富了⼀些功能,如模态显⽰和返回值等。

上述三个类之间的关系如下图:
在这里插入图片描述
选择语⾔和翻译⽂件,由于我们暂时不考虑国际化问题, 直接下⼀步即可:
在这里插入图片描述

选择 Qt 套件。默认只有第⼀个 “Desktop Qt 5.14.2 MinGW 64-bit”,如果安装配置了多个 Qt 套件,就可以都选上。(博主这里是全选上的)
Qt 套件是指 Qt 程序从编译链接到运⾏环境的全部⼯具和 Qt 类库的集合,对于 MinGW 版本 Qt 程序⽣成和调试,⾄少需要 MinGW 中的编译器 g++(⾃动调⽤链接器)、g++ 配套的基础库、调试器 gdb 还有使⽤ MinGW 环境编译⽽成的 Qt 类库⾃⾝。默认情况下,在上⾯ Kit Selection ⾥选中全部套件。

在这里插入图片描述
选择版本控制系统。点击 “下⼀步” 进⼊ 项⽬管理界⾯;在项⽬管理界⾯可以设置作为⼦项⽬,以及加⼊版本控制系统管理。这两个功能暂时⽤不到,都⽤默认的 ,然后点击 “完成” :
在这里插入图片描述
项⽬创建完成之后,Qt Creator 会直接进⼊代码编辑模式,可以看到类似下图界⾯:
在这里插入图片描述

2.2 🍎使用标签实现 Hello World 程序🍎

2.2.1 🍋纯代码方式实现🍋

我们打开widget.cpp文件,向里面添加如下内容:
在这里插入图片描述当我们运行时:
在这里插入图片描述
上面使用的"hello World!!!"本质是一个QString的字符串,这个是Qt自己封装了一个关于字符串的类,它支持直接使用C风格的字符串进行初始化。(除了QString外,Qt还搞了其他的数据结构比如QListQVector等)

这里面大家可能会有一个小小的疑问,我们这里new了一个对象难道不应该delete释放掉它吗?(如果你马上就有这种反应只能说你是一名合格的C++程序员)但是这里我们并不需要手动去释放掉它,因为Qt引入了对象树的概念,他可以将创建的Qt对象给挂到该树上面(本质是一颗N叉树,需要指定父节点,在这里也就是Widget节点,所以要传入this指针),当我们手动的去关掉对应的窗口时才会去释放掉它。

那假如我们只是在栈上创建对象呢?我们来试试:
在这里插入图片描述
我们发现什么也没有打印出来,这其实也很好理解,因为当该局部变量出了作用域后就被销毁了,自然就不能够打印出来我们想要的结果。

那我们如何进行验证呢?
首先需要创建一个MyLabel的类:
在这里插入图片描述
然后我们需要手动的写入要继承自Label,当成功后便可以看见:

在这里插入图片描述

然后我们将构造函数要使用带QWidget*版本的,这样才能够确保自己的对象可以加到对象树上面:

在这里插入图片描述
在这里插入图片描述

接下来我们向mylabel.h中添加析构函数:

在这里插入图片描述

这里有一个小技巧,当我们将光标定位到析构函数,然后使用快捷键Alt+Enter就可以在.cpp文件中快速生成:

在这里插入图片描述

然后我们在析构函数中添加打印语句来方便观察:

在这里插入图片描述

最后我们再进行调用:

在这里插入图片描述

然后运行:

在这里插入图片描述

我们再手动叉掉窗口,进行观察:

在这里插入图片描述
我们发现打印算是打印了,但是出现了乱码问题,应该如何解决呢?

乱码问题根本原因是因为编码方式不匹配。一般来说中文字符编码常见的分为两种:GBKUTF_8,在GBK中使用2个字节表示一个汉字,而在UTF_8中一般是使用3个字节来表示一个汉字。

在文本中我们可以查看字符的编码方式:
在这里插入图片描述
可知是UTF_8,但是在QtCreator中字符串编码却是GBK,此时我们想要正确的进行打印要借助qDebug,这是一个专门用来打印日志的工具,可以自动的处理字符的编码方式,并且它还有一个好处是可以进行统一的关闭,非常方便。
在这里插入图片描述
当我们再次进行运行时:
在这里插入图片描述可以发现已经能够运行成功啦。

2.2.2 🍋可视化操作实现🍋

首先双击:widget.ui ⽂件:
在这里插入图片描述
然后拖拽 标签 ⾄ UI 设计界⾯中,并双击修改标签内容:
在这里插入图片描述

然后点击运行:
在这里插入图片描述

2.3 🍎使用按钮实现 Hello World 程序🍎

2.3.1 🍋纯代码方式实现🍋

在这里插入图片描述
然后运行:
在这里插入图片描述
但是为了使其按钮能够与用户进行交互,所以我们在这里简单的使用了信号与槽,这个大家先看一看,具体怎样使用博主会在下一篇文章进行详细的讲解。

在widget.cpp中:
在这里插入图片描述
在widget.h中:
在这里插入图片描述
这里说明一下为什么要将myButton设置成成员变量,是因为可以在handClicked函数中可以访问到改变量。而上面的connect函数的作用是将信号与槽进行关联。(具体使用将会放到下一篇文章)

验证效果:
在这里插入图片描述
当我们点击下按钮就可以变成下面这样子:
在这里插入图片描述
再点击又回到最开始样子:
在这里插入图片描述

2.3.2 🍋可视化操作实现🍋

先双击:widget.ui ⽂件,然后将按钮进行拖拽:
在这里插入图片描述
然后在widget.cpp中:

在这里插入图片描述
这里大家或许有了疑问,为什么ui可以访问得到一个pushButton的变量呢?其实是因为在进行qmake的时候,会自动在ui_widget.h中生成:
在这里插入图片描述
再来看一下为什么Widget中成员变量ui可以访问pushButton
在这里插入图片描述
这是因为Widget继承自Ui_Widget
另外pushButton变量的名字我们可以自己设置,但是要保证不冲突并且具有一定的意义,我们在设计模式下的右下角就可以自己设置名字:

在这里插入图片描述

最后我们进行验证:
在这里插入图片描述
然后点击按钮:
在这里插入图片描述
跟之前实现的效果是类似的。

2.3.3 🍋对比可视化以及纯代码操作🍋

可能这时候大家心里有一个疑问:那我到底是用可视化还是纯代码方式呢?
其实这个问题取决于具体的业务场景,如果图形化界面比较固定不宜变动我们可以采用可视化的方式进行,但是如果图形化界面容易变动的话可能我们采取纯代码的方式比较好。所以这两种方式我们都得掌握牢固才行。


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

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

相关文章

vue element-ui 表格横向滚动条在合计项下方

目前效果 需求效果 1.隐藏bodyWrapper滚动条,显示footerWrapper滚动条 css代码如下: div ::v-deep .el-table--scrollable-x .el-table__body-wrapper{overflow-x: hidden!important;z-index: 2!important;} div ::v-deep .el-table__footer-wrapper …

WWW ‘24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题

WWW 24 | EarnMore: 如何利用强化学习来处理可定制股票池中的投资组合管理问题 原创 QuantML QuantML 2024-04-16 09:04 上海 Content 本文主要探讨了如何利用强化学习(Reinforcement Learning, RL)来处理可定制股票池(Customizable Stock …

关于RA8900CE时钟芯片的使用注意事项

在快节奏的现代社会&#xff0c;时间变得越来越宝贵。对于时钟的电子设计&#xff0c;高精度且低功耗逐渐成为主流。我们就有一个汽车显示屏的时钟显示项目&#xff0c;要求时钟一天的误差控制在1s以内。要想达到此要求&#xff0c;则必须满足晶振的频率偏差PPM<1/60/60/24*…

【Hadoop大数据技术】——Sqoop数据迁移(学习笔记)

&#x1f4d6; 前言&#xff1a;在实际开发中&#xff0c;有时候需要将HDFS或Hive上的数据导出到传统关系型数据库中&#xff08;如MySQL、Oracle等&#xff09;&#xff0c;或者将传统关系型数据库中的数据导入到HDFS或Hive上&#xff0c;如果通过人工手动进行数据迁移的话&am…

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化&#xff0c;LDA&#xff08;树图&#xff09;、关系图、词云、时间趋势&#xff08;折线图&#xff09;、热度地图、词典情感分析&#xff08;饼图和3D柱状图&#xff09;、词向量神经网络情感分析、tfidf聚类、词向量聚类…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容&#xff0c;默认情况下显示文件的最后 10 行。tail 命令 非常有用&#xff0c;特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

搭建sql-lab出现的php不兼容

下载不了的时候&#xff0c;直接打开该网址下载5.xphp版本&#xff0c;解压到C:\php_studyv8\phpstudy\phpstudy_pro\Extensions\php&#xff08;可能路径都不一样&#xff0c;找到Extensions\php放到该目录下&#xff09;

Excel模板导入、导出工具类

1.引入maven依赖&#xff0c;利用hutool的excel读取 Hutool-poi对excel读取、写入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> <depen…

期权小知识科普

期权的交易时间 上交所期权合约的交易时间为每个交易日9:15至9:25、9:30至11:30、13&#xff1a;00至15:00。 其中&#xff0c;9:15至9:25为开盘集合竞价时间&#xff0c;14:57-15:00为收盘集合竞价时间&#xff0c;其余时段为连续竞价时间&#xff0c;交易所规则另有规定的除…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

Hadoop3:大数据的基本介绍

一、什么是大数据 1、大数据的4v特点 Volume&#xff08;大量&#xff09; Velocity&#xff08;高速&#xff09; Variety&#xff08;多样&#xff09; Value&#xff08;低价值密度&#xff09; 2、大数据部门间的工作岗位 第三部分&#xff0c;其实就是JavaWeb 二、…

李沐53_语言模型——自学笔记

语言模型 1.预测文本序列出现的概率 2.应用在做预训练模型 3.生成文本&#xff0c;给定前面几个词&#xff0c;不断生成后续文本 4.判断多个序列中哪个更常见 真实数据集的统计 《时光机器》数据集构建词表&#xff0c; 并打印前10个最常用的&#xff08;频率最高的&…

4.4 @ControllerAdvice全局数据处理

顾名思义&#xff0c;&#xff20;ControllerAdvice 就是&#xff20;Controller 增强版。&#xff20;ControllerAdvice 主要用来处理全 局数据 ,一般搭配&#xff20;ExceptionHandler、&#xff20;ModelAttribute 及&#xff20;InitBinder 使用。 1. 全局异常处理&#x…

密文字段模糊检索方案

代码地址: https://github.com/zuiyu-main/EncryptDemo https://mp.weixin.qq.com/s/cXOg1tiMtJz2eibDZmXHUQ 在个别特殊领域中&#xff0c;数据的安全问题是非常的重要的&#xff0c;所以需要数据库存储的数据是需要加密存储的。所以也就引申出来本文这个问题&#xff0c;加密…

【C语言__动态内存管理__复习篇6】

目录 前言 一、动态内存管理 二、动态内存函数 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、动态内存常见的6个使用错误 3.1 接收malloc/calloc返回的参数后未及时检查是否为NULL 3.2 越界访问动态内存空间 3.3 对非动态开辟的内存使用free释放 3.4 使用free只释放了…

STM32学习和实践笔记(17):STM32外部中断(EXTI)的整体介绍

1.外部中断介绍 1.1 EXTI简介 STM32F10x外部中断/事件控制器&#xff08;EXTI&#xff09;包含多达 20 个用于产生事件/中断请求的边沿检测器。&#xff08;事件与中断的区别&#xff0c;可参看STM32---中断与事件的区别_中断和事件的区别-CSDN博客&#xff09; 具体有哪些&a…

蓝桥杯2024年第十五届省赛真题-爬山

贪心优先队列的题&#xff0c;贪心会漏一个情况&#xff0c;不知道怎么处理&#xff0c;这里直接打表了 2 1 1 48 49 答案是30&#xff0c;贪心是31 专有名词&#xff1a;hack-有新的测试点过不了 #include<bits/stdc.h> using namespace std; #define endl \n #define …

AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意&#xff1a;从 Docker 19.03 开始&#xff0c;Docker 引入了对 NVIDIA GPU 的原生支持&#xff0c;因此若AI要调用GPU算力的话docker版本也是有要求的&#xff0c;后面博客测试。 当然本篇博客还没设计到GPU的调用&#xff0c;主要Pycharm加Anaconda的方案用习惯了&#…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生…

JavaScript算数运算符

源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <b…