Qt—— 下载、工具介绍以及新建项目
QT下载与配置
下载地址:
https://www.qt.io/download-qt-installer-oss
启动安装程序,按如下步骤安装:
配置环境变量:
在系统环境变量Path
添加:
G:\Qt\6.7.3\mingw_64\bin
Qt自带的工具
Assistant
离线版本的官方文档
Designer
Qt 设计师,图形化设计工具。结合Qt creator使用
Linguist
Qt 语言家,支持国际化
Qt
Qt 命令行
Qt Creator
Qt 集成开发工具
新建项目来写一个GUI程序
选择构建系统- Cmake for Qt 5 dan Qt 6:
构建系统:通过写Qt写的程序,涉及到一些列的“元编程”技术,通过代码来生成代码
Qt框架会在编译的时候,自动先调用一系列的生成工具,基于自己写的代码,生成一系列的其他C++代码,最终编译的代码,也是最后生成的这些代码
指定类名和文件名
使用 Qt Creator 创建项目,会自动生成一些代码出来,生成的代码就包含一个类(Class name),此处就是要选择这个自动生成的类的父类(Base class)是谁
Base class 有三种:
QMainWindows
:完整的应用程序窗口,可以包含菜单栏、工具栏、状态栏QWidget
:表示一个控件,窗口上的一个具体元素,如输入框、按钮等QDialog
:表示一个对话框- 注:Qt中内置的类都是由
Q
开头的
上图中的文件名 Header file, Source file
和类名Class name
是关联的
form file:
Qt中创建图形化界面有两种方式:
- 一种是通过C++代码的方式创建页面
- 一种是通过 form file,以图形化的方式来生成页面。此时就可以通过 Qt designer或直接使用 Qt creator来编辑这个ui文件从而以图形化的方式快速方便的生成图形界面
选择翻译文件
涉及到国际化,不关注
运行生成后的代码
创建好一个空项目后,会生成以下代码:
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
-
QApplication
,编写一个Qt图形化界面,必须要有这样一个对象 -
Widget
:这个类就是上面我们指定的继承QWidget
的子类.show()
方法:显示控制件.hide()
方法:隐藏控制件
-
.exec()
:让程序跑起来- 注意,该
exec
和Linux的exec
进程程序替换没有任何关系
- 注意,该
我们直接运行
可以得到一个空白的图形化界面
解释生成后的代码
创建好项目后,根据我们创建项目时选定的基类,会生成继承类的定义和实现:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H
-
Q_OBJECT
:- 其是Qt内置的一个宏,宏本质就是文本替换,当
Q_OBJECT
被展开后,会生成一大堆代码 - Qt有一个非常核心的机制:“信号”和“槽”,如果某个类想要使用这个机制,就需要引入这个宏
Q_OBJECT
- 其是Qt内置的一个宏,宏本质就是文本替换,当
-
QWidget *parent = nullptr
:- Qt中引入了”对象树“这一机制,对象树是一棵多叉树
- 创建Qt对象,可以把这个对象挂到“对象树”上,此时就需要指定父节点
-
Ui::Widget *ui
:和form file
密切相关
widget.cpp
#include "widget.h"
#include "./ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}
ui->setupUi(this)
:把form file
生成的界面和widget
类关联起来
同时也会生成一个ui
文件,该文件的文件类型为.xml
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Widget</class><widget class="QWidget" name="Widget"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>Widget</string></property></widget><resources/><connections/>
</ui>
- 在Qt中使用该文件的目的就是描述:程序的界面应该是什么样子的
- 进一步,Cmake会调用相关工具,根据这个
.xml
文件生成一些C++代码,从而把完整的界面构造出来
上面所说的C++代码,具体到这里创建的项目,被Cmake编译后,就会生成文件:ui_widget.h
/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 6.7.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/#ifndef UI_WIDGET_H
#define UI_WIDGET_H#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget
{
public:void setupUi(QWidget *Widget){if (Widget->objectName().isEmpty())Widget->setObjectName("Widget");Widget->resize(800, 600);retranslateUi(Widget);QMetaObject::connectSlotsByName(Widget);} // setupUivoid retranslateUi(QWidget *Widget){Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));} // retranslateUi};namespace Ui {class Widget: public Ui_Widget {};
} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H