[Qt 教程之开始的开始] —— Qt工程基本文件详解

Qt系列教程总目录

文章目录

      • 1. pro文件内容解释
      • 2. main文件内容解释
      • 3. widget.cpp/widget.h文件内容解释
      • 4. ui_widget.h文件内容解释
      • 5. widget.ui文件内容解释

Widget窗口部件项目为例,新建的工程目录有如下几个文件:

[Qt 教程之开始的开始] —— Qt工程基本文件详解_第1张图片

QtCreator软件将他们做了如下分组,包含三个文件夹和一个.pro文件:

[Qt 教程之开始的开始] —— Qt工程基本文件详解_第2张图片

他们的作用分别为:

  • .pro文件:项目文件,定义项目相关信息,是qmake用来生成makefile文件的中间文件;
  • .pro.user文件:定义与用户相关的项目信息;
  • /Headers文件夹:存放头文件;
  • /Sources文件夹:存放源文件;
  • /Forms文件夹:存放ui文件;

1. pro文件内容解释

详见Qt 学习(二) —— .pro文件详解

2. main文件内容解释

Widget窗口部件项目为例,解释一下main函数内容:

#include "widget.h"

#include 

// Qt应用程序入口
// main()函数主要执行一些初始化工作,然后将控制转交给Qt库
// 然后Qt库通过事件向程序告知用户行为
int main(int argc, char *argv[])
{
    // Qt应用程序类,实例化Qt应用程序对象a
    QApplication a(argc, argv);
    // 创建一个窗口对象,这里调到widget.cpp中
    Widget w;
    // 窗口部件默认不可见,要调用show()方法使它可见
    w.show();
    // 程序进入消息循环,即main()函数将控制权转交给Qt
    // 当应用程序退出的时候,exec()函数就会返回
    // 在exec()函数中,Qt接收处理用户和系统的事件并将它们传递给适当的窗口部件
    return a.exec();
}

3. widget.cpp/widget.h文件内容解释

在main函数中实例化了Widget窗口对象,这里介绍一下widget.cppwidget.h中的代码:

widget.cpp

#include "widget.h"
#include "ui_widget.h" // 窗口ui头文件,用于初始化ui及拖拽控件对象

// Widget构造函数
// 其中将ui初始化为Ui::Widget,该类位于ui_widget.h中,用于初始化ui及拖拽控件对象
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    // 为Ui对象传入当前窗口对象指针
    // 即将当前窗口对象与其Ui绑定
    ui->setupUi(this);
}

// Widget析构函数
Widget::~Widget()
{
    delete ui;
}

widget.h

// 条件编译,防止头文件被重复引用
#ifndef WIDGET_H
#define WIDGET_H

#include 

// QT的命名空间,其实就是C++的命名空间封装了一层,如下是该宏定义:
// # define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
// # define QT_END_NAMESPACE }
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } // 声明Ui命名空间下的Widget类
QT_END_NAMESPACE

// 定义Widget类
class Widget : public QWidget
{
    // Q_OBJECT宏用于提供Qt信号槽和元对象系统服务
    // 它必须限定为私有访问权限
    Q_OBJECT

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

private:
    // 创建Ui::Widget类型的指针,用于操作ui界面及其控件
    Ui::Widget *ui;
};
#endif // WIDGET_H

4. ui_widget.h文件内容解释

该文件初始化了ui及拖拽控件对象,由widget.ui文件生成,所以不能手动修改,即使修改也会在下次编译被覆盖。

#pragma once // 避免头文件被重复引用
// Qt头部声明
/********************************************************************************
** Form generated from reading UI file ''
**
** Created by: Qt User Interface Compiler version 6.3.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#include 
#include 
#include 

QT_BEGIN_NAMESPACE

// 该类用于初始化ui及拖拽控件对象
class Ui_Widget
{
public:

    // 该函数用于初始化窗口及创建窗口中的控件对象
    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(800, 600);

        retranslateUi(Widget);

        // Qt元对象系统生成信号与槽的连接
        // 递归搜索给定对象的所有子对象,并将来自这些子对象的匹配信号连接到对象插槽
        // 所连接的槽函数要按特定形式的定义,如下:
        // void on__();
        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    // 动态翻译Ui界面的文字,用于国际化
    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
    } // retranslateUi

};

namespace Ui {
    // 声明Ui对应的类继承于该Ui类
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE
 
  

5. widget.ui文件内容解释

该文件为xml格式,类似于HTML,用于表示ui界面,Qt根据该文件生成ui_widget.h文件,Qt Creator可将其解析为图形界面,文件内容如下:


<ui version="4.0">
 <class>Widgetclass>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0x>
    <y>0y>
    <width>800width>
    <height>600height>
   rect>
  property>
  <property name="windowTitle">
   <string>Widgetstring>
  property>
 widget>
 <resources/>
 <connections/>
ui>

对应的图形界面如下:

[Qt 教程之开始的开始] —— Qt工程基本文件详解_第3张图片

添加一个按钮,文件内容如下:


<ui version="4.0">
 <class>Widgetclass>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0x>
    <y>0y>
    <width>800width>
    <height>600height>
   rect>
  property>
  <property name="windowTitle">
   <string>Widgetstring>
  property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>140x>
     <y>140y>
     <width>231width>
     <height>71height>
    rect>
   property>
   <property name="styleSheet">
    <string notr="true"/>
   property>
   <property name="text">
    <string>PushButtonstring>
   property>
  widget>
 widget>
 <resources/>
 <connections/>
ui>

对应的图形界面如下:

[Qt 教程之开始的开始] —— Qt工程基本文件详解_第4张图片

你可能感兴趣的:(Qt,qt,工程文件,代码详解)