【Qt】Qt Creator初使用

news2024/11/15 15:24:39

目录

一. 创建新项目

二. 认识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_NAMESPACE

class 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.coloradmin.cn/o/1906993.html

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

相关文章

Vue3使用markdown编辑器之Bytemd

官网地址&#xff1a;https://bytemd.js.org/playground GitHub地址&#xff1a;https://github.com/bytedance/bytemd ByteMD 是字节跳动出品的富文本编辑器&#xff0c;功能强大&#xff0c;可以免费使用&#xff0c;而且支持很多掘金内置的主题&#xff0c;写作体验很棒。 …

Android约束布局的概念与属性(1)

目录 1&#xff0e;相对定位约束2&#xff0e;居中和偏移约束 约束布局&#xff08;ConstraintLayout&#xff09;是当前Android Studio默认的布局方式&#xff0c;也是最灵活的一种布局方式。约束布局推荐使用所见即所得的模式进行布局&#xff0c;约束布局的大部分布局可以通…

CentOS7下安装Doris

Doris简介 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场…

SpringBoot升级引发一个循环依赖支持问题

最近有个重要的项目要求使用带自定义表单的工作流。要求灵活配置流程。选用了较稳定的Flowable6.72版本。但面临着一个问题。教材上,Flowable6.7.2要求匹配的SpringBoot版本是2.6.2.需要对项目的Boot版本从2.3releae升到2.6.2,其他还好。不存在有类编译问题或类找不到问题。就是…

互联网银行每日2TB数据量,Apache SeaTunnel集成应用轻松搞定!

在我国&#xff0c;数字化的趋势驱动互联网银行发展走上快车道&#xff0c;近年来互联网银行发展迅速&#xff0c;积极拓展线上业务&#xff0c;并利用大数据技术加强风险控制&#xff0c;积极进行数字化转型。当新兴互联网银行乘着数字化改革的风潮搭档数据集成平台Apache Sea…

Android 15 适配之16K Page Size :为什么它会是最坑的一个适配点

首先什么是 Page Size &#xff1f;一般意义上&#xff0c;页面(Page)指的就是 Linux 虚拟内存管理中使用的最小数据单位&#xff0c;页面大小(Page Size)就是虚拟地址空间中的页面大小&#xff0c; Linux 中进程的虚拟地址空间是由固定大小的页面组成。 Page Size 对于虚拟内…

如何把harmonos项目修改为openharmony项目

一开始分不清harmonyos和openharmony&#xff0c;在harmonyos直接下载的开发软件&#xff0c;后面发现不对劲&#xff0c;打脑阔 首先你要安装对应版本的开发软件&#xff0c;鸿蒙开发是由harmonyos和openharmony官网两个的&#xff0c;找到对应的地方下载对应版本的开发软件&…

rocketmq实现限流

目录 问题背景 技术方向 方案确认 消息队列&#xff08;√&#xff09; 分布式锁&#xff08;&#xff09; 方案实现 监控方向 业务方向 问题背景 公司邮件服务token有 分钟内超200封的熔断机制&#xff0c;当前token被熔断后&#xff0c;系统发邮件操作会被忽略&…

关于微信支付-商户平台:查询订单提示“查询失败:操作失败,请稍候重试”的分析

目录 引子 分析 应对 小结 引子 在开发和实施微信 JSAPI 支付的应用后&#xff0c;我们遇到了一些问题&#xff0c;订单的状态更新不正常&#xff0c;当然我们首先需要从自身寻找原因和完善解决问题的办法和方案。在支付的过程中&#xff0c;客户会给我们一些反馈&#xf…

K8S篇之Ingress详解以及用法说明

一、Ingress简介 Ingress 是 Kubernetes 中用于管理和配置从集群外部访问集群内部服务的资源对象。它通过定义路由规则来控制外部流量的访问方式&#xff0c;支持基于 HTTP 和 HTTPS 的高级路由功能和安全性配置。 Ingress是一种HTTP方式的路由转发机制&#xff0c;为K8S服务配…

【力扣高频题】014.最长公共前缀

经常刷算法题的小伙伴对于 “最长”&#xff0c;“公共” 两个词一定不陌生。与此相关的算法题目实在是太多了 &#xff01;&#xff01;&#xff01; 之前的 「动态规划」 专题系列文章中就曾讲解过两道相关的题目&#xff1a;最长公共子序列 和 最长回文子序列 。 关注公众…

SpringCloud 负载均衡

目录 一、负载均衡 1、问题 2、什么是负载均衡 服务端负载均衡 客户端负载均衡 二、Spring Cloud LoadBalance 1、使用 Spring Cloud LoadBalance 2、负载均衡策略 3、LoadBalancer 原理 一、负载均衡 1、问题 我们来看一下前面写的代码&#xff1a; List<Serv…

【易捷海购-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Drools开源业务规则引擎(五)- jBPM流程图元素介绍

文章目录 Drools开源业务规则引擎&#xff08;五&#xff09;- jBPM流程图元素介绍1.process2.startEvent3.Connections3.1.sequenceFlow3.2.Association 4.Activities4.1.businessRuleTask4.2.scriptTask 5.Gateways5.1.exclusiveGateway 6.endEvent Drools开源业务规则引擎&a…

Windows netstat命令详解,Windows查看网络连接

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 netstat 常用来…

支持图片识别语音输入的LobeChat保姆级本地部署流程

文章目录 前言1. LobeChat对我们有哪些帮助?2. 本地安装LobeChat3. 如何使用LobeChat工具4. 安装Cpolar内网穿透5. 实现公网访问LobeChat6. 固定LobeChat公网地址 前言 本文主要介绍如何在Windows系统电脑本地部署LobeChat&#xff0c;一款高颜值的开源AI大模型智能应用&…

【删库跑路】一次删除pip下载的所有第三方库方法

进入命令行&#xff0c;先list看下库存 pip list导出所有的第三方库至一文件列表 pip freeze >requirements.txt按照列表卸载所有库 pip uninstall -r requirements.txt -y再list看下&#xff0c;可见库存已清空

MATLAB基础应用精讲-【数模应用】 岭回归(Ridge)(附MATLAB、python和R语言代码实现)

目录 前言 算法原理 数学模型 Ridge 回归的估计量 Ridge 回归与标准多元线性回归的比较 3. Ridge 参数的选择 算法步骤 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 6、输出结果分析 7、注意事项 8、模型理论 SPSSAU 岭回归分析案…

第三届机器学习、云计算与智能挖掘国际会议(MLCCIM 2024)

随着科技的不断进步&#xff0c;机器学习和挖掘技术已成为推动现代社会发展的重要力量。本届机器学习、云计算与智能挖掘国际会议&#xff08;MLCCIM&#xff09;将于2024年8月8日至8月11日在中国湖北省神农架盛大召开&#xff0c;旨在汇聚全球智慧&#xff0c;共同探讨这一领域…

Linux安装elasticsearch单机版

一、检查内核 uname -a uname -m 二、下载版本 下载版本选择自己服务器相同的内核版本 我这边是aaech64 ES下载地址 Kibana 下载地址 二、上传服务器解压 tar -xvf elasticsearch-8.14.1-linux-aarch64.tar.gz 三、安装ES 因为ES不能用root用户启动先创建用户 #新增 es …