【Qt】Qt Creator初使用

目录

一. 创建新项目

二. 认识Qt Creator界面

2.1 main.cpp 代码解释

2.2 mywidget.h 代码解释

2.3 mywidget.cpp 代码解释

2.4 form file —— Forms里的mywidget.ui

2.5 .pro文件

2.6 编译生成的中间文件


Qt Creator是一个跨平台集成开发环境(IDE),专门用于Qt应用程序开发。它提供了设计、编码、测试和部署基于Qt的软件项目所需的工具和功能

Qt的安装可以参看  Qt开发环境配置

一. 创建新项目

1.1 首先,先点击文件,点击新建项目


 1.2 选择创建什么项目;此处选择Qt Widgets Application


 1.3 选择项目路径,注意不能带中文!!!


1.4 选择构建工具:通常选择qmake

Qt的构建工具有三种可供选择。

构建系统,通过Qt写的程序,涉及到一系列的“元编程”技术,通过代码生成代码。Qt框架在编译时,会自动先调用一系列生成工具,基于我们自己写的代码,生成一系列的其他的C++代码,最终编译的代码,也是最后生成的这些代码

qmake用于自动生成makefile文件,支持跨平台构建,文件后缀为.pro
CMake跨平台构建工具,其本身不是编译器,而是生成一个让编译器能读懂编译流程的文件工具。让CMake自动生成构建系统,例如Makefile和Visual Studio项目文件
Qbs号称新一代的构建工具,从项目文件的高级项目描述中生成一个正确的依赖表

因为Qbs使用的人少,Qt官方弃用了Qbs;对于Qt用户来说,qmake使用最广泛,CMake次之


1.5 填写类信息设置界面:选择基类和勾选ui界面文件(form file,该文件很关键,后续会着重讲解)

类名和Header file,Source file尽量保持一直,可读性好

对于基类,目前有三种基类

QMainWindow主窗口类,一般用于较为复杂的应用程序,除了中英客户区界面,还包括菜单栏、工具栏、状态栏以及多个可停靠的工具对话框等
QWidget最简单、最基本的窗体程序,里面可以放置多个控件实现程序功能
QDialog基于对话框的程序,对话框一般用于弹窗,也可以用于主界面显示。对话框是从QWidget继续继承而来的,并丰富了一些功能,如模态显示和返回值等

上述三个类之间的关系如下图:


1.6 选择语言和翻译文件:支持国际化问题,暂时不考虑,直接下一步


1.7 选择Qt套件

默认只有一个"Desktop Qt 5.14.2 MinGW 64-bit",如果安装配置了多个Qt套件,可以勾选"Select all kits"

Qt套件是Qt从编译链接到运行环境的全部工具和Qt类库的结合,对于MinGW版本,Qt程序生成和调试,至少需要MinGW中的编译器g++(自动调用链接器)、g++配套的基础库,调试器还有使用MinGW环境编译而成的Qt类库自身。默认情况下,在上面Kit Selection里选中全部套件


1.8 选择版本控制系统:如git(后续可把代码提交到码云或github)

到此,点击完成,一个Qt项目就创建成功了

二. 认识Qt Creator界面

2.1 main.cpp 代码解释

#include "mywidget.h"#include <QApplication>int main(int argc, char *argv[])//main的形参就是命令行参数
{//编写一个Qt的图形化界面程序,一定需要有QApplication对象QApplication a(argc, argv);//在创建项目时选择生成的类MyWidget w;w.show();//创建一个控件对象并显示;hide方法即为隐藏;都是父类QWidget提供的方法return a.exec();//让程序执行起来
}
  • argc是命令行参数的个数,argv保存命令行参数,如./text 777。有两个参数,第一个是./text,第二个是777。所以argc为2,argv分别保存"./text" 和 "777"
  • 在创建项目时,我们选择生成MyWidget类,继承自QWidget,可以使用其包含的属性和提供的方法。show()方法会显示控件,hide()方法会隐藏控件

2.2 mywidget.h 代码解释

//防止头文件重复包含
#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QWidget>//QWidget所需的头文件QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }//在Ui命名空间声明我们选择的类
QT_END_NAMESPACEclass MyWidget : public QWidget//继承自QWidget
{Q_OBJECT//Qt定义的宏,与"信号"和"槽"机制相关public:MyWidget(QWidget *parent = nullptr);//将MyWidget挂到"对象树(N叉树)"~MyWidget();private:Ui::MyWidget *ui;//和form file密切相关
};
#endif // MYWIDGET_H
  • Q_OBJECT 是 Qt自定义的宏,其本质是进行文本替换,与Qt核心机制 "信号""槽" 相关
  • MyWidget继承自QWidget,在其构造函数中,有父类指针,创建的该对象,就可以把该对象挂到 "对象树" 。对象树是一个N叉树
  • Ui::MyWidget *ui 与 form file密切相关

2.3 mywidget.cpp 代码解释

#include "mywidget.h"
#include "ui_mywidget.h"//form file 被 qmake生成的文件MyWidget::MyWidget(QWidget *parent): QWidget(parent)//挂接对象树, ui(new Ui::MyWidget)
{ui->setupUi(this);//把form file生成的界面和当前widget关联起来
}MyWidget::~MyWidget()
{delete ui;
}

mywidget.cpp没啥内容,关键是要弄懂form file是什么

2.4 form file —— Forms里的mywidget.ui

当双击"mywidget.ui"后,会调用Qt Designer打开ui文件,展示一个图形化的界面编辑器

点击左侧的"编辑"按钮,返回ui文件的内容

ui文件的本质是xml格式的文件

xml和html非常类似,都是使用成对的标签来表示数据

不同点是xml的标签具体含义可以由程序员自定义,html的标签含义则是固定的,由标准委员会统一约定,所有浏览器都要按照同一套标签解释html文件

Qt使用xml文件描述程序的界面,进一步的qmake会调用相关的工具,依据这个xml文件生成一些C++代码,从而把完整的界面构造出来

2.5 .pro文件

Qt通过 .pro文件 + qmake 的方式编译项目,其功能类似于编写Linux程序的Makefile

Qt Creator把编译的细节都封装好了,我们不需要过多关注,只需要点击运行按钮即可

2.6 编译生成的中间文件

右键 .pro文件,选择"在Explorer中显示"。注意:Explorer是文件资源管理器,如果Qt项目在C盘中,可直接使用,否则会找不到"Explorer.exe"。

也可以直接打开项目所在目录。在项目的上级目录会发现有一个"build-xxxxxx"的目录,其中存放着编译生成的临时文件

Makefile由qmake生成。

debug文件夹中有着我们编译生成的程序

点击lesson1.exe,就会运行程序,其效果和我们在Qt Creator中点击运行按钮相同

在build-xxxxx中有一个ui_mywidget.h,由widget.ui xml 生成 的.h文件

将其拖拽到Qt Creator中

可以看到Ui_MyWidget类的实现。

在mywidget.cpp中有使用(在cpp文件中叫Ui::MyWidget,二者相同),Ui_MyWidget的实现根据xml文件,也就是.pro文件

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

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

相关文章

10分钟使用网站构建框架hugo本地搭建个人网站并快速上线详细教程

文章目录 前言1. 安装环境2. 配置环境变量与hugo安装2.1 创建程序目录2.2 配置环境变量2.3 查看程序版本 3. 创建博客网站3.1 创建站点3.2 在站点中创建一篇文章3.3 为网站添加主题 4. 本地访问测试5. 安装内网穿透工具6. 配置公网地址7. 配置固定公网地址 前言 今天和大家分享…

量产工具一一UI系统(四)

前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显示系统&#xff08;一&#xff09;-CSDN博客量产工具一一输入系统&#xff08;二&#xff09;-CSDN博客量产工具一一文字系统&#xff08;三&#xff09;…

前端面试题23(css3)

关于CSS3的面试题&#xff0c;我们可以从多个维度来探讨&#xff0c;包括但不限于选择器、盒模型、布局技术、动画与过渡、响应式设计等。下面我会列举一些典型的CSS3面试问题&#xff0c;并尽可能提供详细的解答或示例代码。 1. CSS3中新增了哪些选择器&#xff1f; 答案: C…

医院、体育场、学校或工厂等的同步时钟系统有什么区别?

在现代社会中&#xff0c;同步时钟系统在医院、体育场、学校和工厂等场所发挥着至关重要的作用。尽管它们的基本功能都是提供准确统一的时间&#xff0c;但由于各场所的性质和需求不同&#xff0c;其同步时钟系统在诸多方面存在显著区别。 一、医院同步时钟系统 医院作为救死扶…

selenium处理cookie问题实战

1. cookie获取不完整 需要进入的资损平台(web)首页&#xff0c;才会出现有效的ctoken等信息 1.1. 原因说明 未进入指定页面而获取的 cookie 与进入页面后获取的 cookie 可能会有一些差异&#xff0c;这取决于网站的具体实现和 cookie 的设置方式。 通常情况下&#xff0c;一些…

镜舟科技:国产数据库角逐金融赛道,开年斩获数家银行订单

在国产数据库领域&#xff0c;镜舟科技正迅速崛起&#xff0c;成为一匹瞩目的基础数据技术黑马。 开年伊始&#xff0c;镜舟科技便成功斩获中信银行、南京银行、某股份制银行、某头部民营银行、某大型综合类券商以及某消费金融公司等多家金融企业订单&#xff0c;其锚定需求匹…

C++ | Leetcode C++题解之第216题组合总和III

题目&#xff1a; 题解&#xff1a; class Solution { private:vector<vector<int>> res;void backtracking(int k, int n, vector<int> ans){if(k 0 || n < 0){if(k 0 && n 0){res.emplace_back(ans);}return;}int start (ans.size() 0 ?…

30万的剧本杀店 被“好色”店长玩死了

文&#xff5c;琥珀食酒社 作者 | 朱珀 对开店搞钱的人来讲 什么才是最苦逼的&#xff1f; 不是一开始生意就不行 而是刚开始好到不行 最后只剩下不行 本期投稿的主人公糊糊 就是这样的 苦逼大BOSS 30万开剧本杀店 短短几个月 从巅峰跌到谷底 被捞钱又好色的猪队友…

代码随想录算法训练营第67天:图论5[1]

代码随想录算法训练营第67天&#xff1a;图论5 ‍ 105.有向图的完全可达性 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 【题目描述】 给定一个有向图&#xff0c;包含 N 个节点&#xff0c;节点编号分别为 1&#xff0c;2&#xff0c;…&#xff0…

ICC2:ignore pin的设置

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接:

项目:简易Mybatis

目录 一、新建项目 二、新建模块 三、回顾JDBC 四、准备环境 五、使用dom4j解析xml文件 六、开始,编写Mapper解析API 1、自定义Resources类 2、定义Configuration类 3、定义MappedStatement类 4、定义XmlMapperBuilder类 5、更新一下UserMapper.xml和UserMapper接口 …

Redis基础教程(十六):Redis Stream

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

读书记录《SQL从小白到大牛》01

读书记录《SQL从小白到大牛》01 接地气的书名&#xff0c;内容应当值得一读。 第一篇 SQL基础 01 一些基础概念 SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;&#xff0c;是一套用来输入、更改和查看关系数据库内容的命令。数据库发展经历三个阶…

SMA 内孔 弯头——KH-SMA-K513-G

品  牌&#xff1a; kinghelm(金航标) 厂家型号&#xff1a; KH-SMA-K513-G 封装&#xff1a; 插件 商品毛重&#xff1a; 2.86克(g) 包装方式&#xff1a; 袋装

使用Mybatis批量插入大量数据的实践

前言 在项目开发过程中&#xff0c;我们经常会有批量插入的需求&#xff0c;例如&#xff1a;定时统计任务 但是受限于MySQL中 max_allowed_packet 参数限制&#xff0c;5.7版本默认值为4M&#xff0c;这显然不太符合我们的需求&#xff0c;当然我们也可以通过修改此值来适应…

【Unity几种数据存储之间的区别】PlayerPrefs、Json、XML、二进制、SQLite数据存储之间的优缺点以及如何选择

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 专栏交流&#x1f9e7;&…

Meta关于深度学习推荐系统的Scaling Law的研究

作者 | 番茄爱鸡蛋 整理 | NewBeeNLP https://zhuanlan.zhihu.com/p/688913185 大家好&#xff0c;这里是 NewBeeNLP。今天看看 Meta 关于深度学习推荐系统 Scaling Law 的研究。 零、论文信息 论文题目&#xff1a;Wukong: Towards a Scaling Law for Large-Scale Recommend…

更好的预测方法:使用前后控制图

我已经写了很多关于阶段控制图的文章&#xff0c;因为我认为它们是一个非常好的可视化工具。它们有许多用途而且很容易创建。除了有助于分析改进或变更前后的流程之外&#xff0c;它们还是更准确预测或预报的重要第一步。 不同的预测方式或用不同的方法预测 有很多不同的方法…

硅纪元视角 | Speak火了!3个月收入翻倍,OpenAI为何频频下注?

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

信息技术课堂上如何有效防止学生玩游戏?

防止学生在信息技术课堂上玩游戏需要综合运用教育策略和技术手段。以下是一些有效的措施&#xff0c;可以用来阻止或减少学生在课堂上玩游戏的行为&#xff1a; 1. 明确课堂规则 在课程开始之初&#xff0c;向学生清楚地说明课堂纪律&#xff0c;强调不得在上课时间玩游戏。 制…