当前位置:   article > 正文

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

qt工程文件

Qt系列教程总目录

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

在这里插入图片描述

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

在这里插入图片描述

他们的作用分别为:

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

1. pro文件内容解释

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

2. main文件内容解释

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

#include "widget.h"

#include <QApplication>

// 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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

widget.h

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

#include <QWidget>

// 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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 <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>

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_<object name>_<signal name>(<signal parameters>);
        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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

5. widget.ui文件内容解释

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

<?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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

对应的图形界面如下:

在这里插入图片描述

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

<?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 class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>140</x>
     <y>140</y>
     <width>231</width>
     <height>71</height>
    </rect>
   </property>
   <property name="styleSheet">
    <string notr="true"/>
   </property>
   <property name="text">
    <string>PushButton</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

对应的图形界面如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/292788
推荐阅读
相关标签
  

闽ICP备14008679号