Qt新建项目各文件说明

  • 前言
  • 一、新建项目架构
  • 二、项目管理文件.pro
  • 三、界面文件.ui
  • 四、主函数文件main.cpp
  • 五、窗体相关文件test.h
  • 六、窗体相关文件test.cpp
  • 七、ui_test.h文件



前言

从Qt基础部分逐步开始学习Qt相关知识,并对所学知识进行记录汇总。记录从Qt新建项目的文件说明开始,关于Qt安装以及项目新建操作可自行网上查找。

一、新建项目架构

qt项目架构图 qt项目结构_qt项目架构图


1、test.pro:项目管理文件,包含一些对项目的设置项

2、Headers分组:该节点下包含项目所有的头文件(.h文件),图中test.h是该项目中主窗口类的头文件。

3、Sources分组:该节点下是项目所有C++源文件(.cpp文件),图中main.cpp是主函数文件,也是应用程序入口。test.cpp是主窗口类的实现文件,与test.h文件对应。

4、Forms分组:该节点下是项目所有界面文件(.ui文件)。图中test.ui是主窗口的界面文件。界面文件是文本文件,使用XML语言描述界面的组成。

二、项目管理文件.pro

QT       += core gui    #core gui:GUI设计的类库模块。根据项目涉及的功能需求,添加适当的类库模块支持

#当Qt主版本大于4时,加入widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

#记录项目中包含的源程序文件、头文件、界面文件。这些文件Qt会自动添加。
SOURCES += \
    main.cpp \
    test.cpp

HEADERS += \
    test.h

FORMS += \
    test.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

三、界面文件.ui

该文件是可视化设计的窗体定义文件,双击项目文件中的.ui文件,可以打开一个集成再Qt Creator中的设计师界面。

在设计界面进行操作Qt会自动解析,可以不用管该文件是怎么生成的。

qt项目架构图 qt项目结构_Qt_02

四、主函数文件main.cpp

#include "test.h"

#include <QApplication>     // Qt标准应用程序类

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);     // 定义并创建应用程序
    test w;                         // 定义并创建窗口
    w.show();                       // 显示窗口
    return a.exec();                // 应用程序运行
}

五、窗体相关文件test.h

#ifndef TEST_H
#define TEST_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class test; }    // 一个命名空间ui,包含一个test类
QT_END_NAMESPACE

class test : public QMainWindow
{
    Q_OBJECT	// 宏,使用Qt信号槽机制的类必须加入该宏

public:
    test(QWidget *parent = nullptr);
    ~test();

private:
    Ui::test *ui;       // 使用ui::test定义的一个指针
};
#endif // TEST_H

六、窗体相关文件test.cpp

#include "test.h"
#include "ui_test.h"    // Qt编译生产的与UI文件对应的类定义文件

// 构造函数:执行父类QMainWindow的构造函数,创建一个Ui::test类的对象ui
test::test(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::test)
{
    ui->setupUi(this);  // 执行了Ui::test类的函数,实现窗口的生成和各种属性的设置、信号槽的关联
}

test::~test()
{
    delete ui;
}

七、ui_test.h文件

在对test.ui文件编译后生产的一个文件,该文件不会直接在项目文件目录中显示。
1、文件定义了一个类UI_TEST,用于封装可视化设计界面。
2、自动生成了界面各个组件的类成员变量定义。在public部分为界面上每一个组件定义了一个指针变量,变量名称就是设置的objectName。
3、定义了setupUI()函数,这个函数用于创建各个界面组件,并设置其位置、大小、文字内容、字体等属性,设置信号槽关联。
setupUI()函数第一部分根据设计师界面内容,用C++代码创建界面上各组件,并设置其属性。
接下来调用retranslateUI(test),用来设置界面各组件的文字内容属性,如标签上的文字、按键的文字、窗体的标题等。将界面上的文字设置的内容独立出来作为一个函数,在设计多语言界面时会用到该函数。
第三部分是设置信号槽的关联。
4、定义namespace UI,并定义一个从UI_test集成的类