【Qt】Qt Creator初使用

目录

[一. 创建新项目](#一. 创建新项目)

[二. 认识Qt Creator界面](#二. 认识Qt Creator界面)

[2.1 main.cpp 代码解释](#2.1 main.cpp 代码解释)

[2.2 mywidget.h 代码解释](#2.2 mywidget.h 代码解释)

[2.3 mywidget.cpp 代码解释](#2.3 mywidget.cpp 代码解释)

[2.4 form file ------ Forms里的mywidget.ui](#2.4 form file —— Forms里的mywidget.ui)

[2.5 .pro文件](#2.5 .pro文件)

[2.6 编译生成的中间文件](#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 代码解释

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 代码解释

cpp 复制代码
//防止头文件重复包含
#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 代码解释

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文件

相关推荐
糖豆豆今天也要努力鸭几秒前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
Betty’s Sweet2 分钟前
[C++]:IO流
c++·文件·fstream·sstream·iostream
烦躁的大鼻嘎9 分钟前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
ac.char16 分钟前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾16 分钟前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
不会写代码的ys22 分钟前
【类与对象】--对象之舞,类之华章,共绘C++之美
c++
兵哥工控25 分钟前
MFC工控项目实例三十二模拟量校正值添加修改删除
c++·mfc
在下不上天25 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
长弓聊编程35 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
陌小呆^O^38 分钟前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp