Qt6 C++ 开发指南学习记录二

二、GUI程序设计基础

2.1 GUI程序结构与运行机制

2.1.1 GUI项目文件组成

Qt Creator中新建一个项目HelloWorld,这个项目目录树如下
项目结构树

  • HelloWorld.pro文件:使用qmake构建系统时的项目配置文件,包括关于项目的各种设置内容。
  • Headers文件夹:该节点下是项目内的C++头文件(.h文件),该项目有一个头文件widget.h,它是窗口类的头文件。
  • Sources文件夹:该节点下是项目内的C++源程序文件(.cpp文件),该项目有两个C++源程序文件:widget.cpp是窗口类的程序文件,与widget.h文件对应;main.cpp是包含main()函数的文件。
  • Forms文件夹:该节点下是项目内的窗体文件(.ui文件),也称为用户界面(user interfaceUI)文件。该项目有一个UI文件widget.ui

2.1.2 项目配置文件

使用向导创建项目,选择qmake构建系统会生成一个“.pro”的项目配置文件,文件名称就是项目名称。文件HelloWorld.pro是本项目的项目配置及文件:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

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

qmake是构建项目的工具软件,qmake的作用是根据项目配置文件中的设置生成Makefile文件,然后C++编译器就可以根据Makefile文件进行编译和连接。对于Qt项目,qmake还会自动为元对象编译器(meta-object compilerMOC)和用户界面编译器(user interface compilerUIC)生成构建规则。
Qt项目的配置文件是自动生成的,一般不需要手动修改。配置文件中“#”用于标识注释语句。
qmake配置文件中常见变量的含义见下表:

变量和 含义
QT 项目中使用的Qt模块列表,在用到某些模块时需要手动添加
CONFIG 项目的通用配置选项
DEFINES 项目中的预处理定义列表,例如可以定义一些用于预处理的宏
TEMPLATE 项目使用的模板,项目模板可以是应用程序(app)或库(lib)。如果不设置就默认为应用程序
HEADERS 项目中的头文件(.h文件)列表
SOURCES 项目中的源程序文件(.cpp文件)列表
FORMS 项目中的UI文件(.ui文件)列表
RESOURCES 项目中的资源文件(.qrc文件)列表
TARGET 项目构建后生成的应用程序的可执行文件名称,默认与项目名称相同
DESTDIR 目标可执行文件的存放路径
INCLUDEPATH 项目用到的其他头文件的搜索路径列表
DEPENDPATH 项目其他依赖文件(如源程序文件)的搜索路径列表

qmake中提供替换函数(replace function)用于在配置过程中处理变量或内置函数的值,“$$”是替换函数的前缀,后面可以是变量名或qmake的一些内置函数。

2.1.3 UI文件

后缀为ui的文件是用于窗口界面可视化设计的文件,如widget.ui。双击项目管理目录树中的文件widget.uiQt Creator会打开内置的Qt Designer对窗口界面进行可视化设计。
Qt Designer有以下一些功能区域。

  • 窗口左侧是组件面板,分为多个组,如Layouts、Buttons、Display Widgets等,界面设计的常用组件都可以在组件面板里找到。
  • 窗口中间主要区域是待设计的窗体。如果要将某个组件放置到窗体上,从组件面板上拖动一个组件放置到窗体上即可。例如,放置一个标签(Label)和一个按钮(Push Button)到窗体上。
  • 待设计窗体下方有Action编辑器(Action Editor)和信号与槽编辑器(Signals and Slots Editor)。Action编辑器用于可视化设计Action,信号与槽编辑器用于可视化地进行信号与槽的关联。
  • 窗口上方有一个布局和界面设计工具栏,工具栏上的按钮主要用于实现布局和界面设计。
  • 窗口右侧上方是对象检查器(Object Inspector),它用树状视图显示窗体上各组件的布局和层级关系。视图有两列,显示了每个组件的对象名称(objectName)和类名称。
  • 窗口右侧下方是属性编辑器(Property Editor)。属性编辑器显示窗体上选中的组件或窗体的各种属性,可以在属性编辑器里修改这些属性的值。

属性编辑器的内容分为两列,Property列是属性的名称,Value列是属性的值。属性又分为多个组,实际上表示类的继承关系。objectName属性表示组件的对象名称,每个组件都需要一个唯一的对象名称,以便在程序中被引用。组件的命名应该遵循一定的规则,具体使用什么样的命名规则根据个人习惯而定,主要是要便于区分和记忆,也要便于与普通变量区分。在属性编辑器里可以修改组件的属性值。

2.1.4 主程序文件

文件main.cpp中包含main()函数,全部代码如下:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
   
   
    QApplication a(argc, argv);  // 定义并创建应用程序
    Widget w;  // 定义并创建窗口对象
    w.show();  // 显示窗口
    return a.exec();  // 运行应用程序,开始应用程序的消息循环和事件处理
}

main()函数是C++程序的入口。
QApplicationQt的标准应用程序类。

2.1.5 窗口相关的文件

Qt CreatorProjects设置界面,取消勾选Shadow build复选框,然后以Release模式构建项目。构建项目后,项目的根目录下会生成一个文件ui_widget.h
窗口相关的几个文件:

文件 说明
widget.h 定义了窗口类Widget
widget.cpp 实现Widget类的功能的源程序文件
widget.ui 窗口UI文件,用于在 Qt Designer中进行UI可视化设计。widget.ui是一个XML文件,存储界面上各个组件的属性和布局内容
ui_widget.h UI文件经过UIC编译后生成的文件,这个文件里定义了一个类,类的名称是Ui_Widget,用C++语言描述UI文件中界面组件的属性设置、布局以及信号与槽的关联等内容

1、文件widget.h
文件widget.h是定义窗口类的头文件。文件内容如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
   
    class Widget; }  // 一个名字控件Ui,包含一个类Widget
QT_END_NAMESPACE

class Widget : public QWidget  // 类Widget继承自类QWidget
{
   
   
    Q_OBJECT   // 使用Qt元对象系统的类时必须插入的一个宏

public:
    Widget(QWidget *parent = nullptr);  // 构造函数
    ~Widget();  // 析构函数

private:
    Ui::Widget *ui;  // 使用Ui::Widget类定义的一个对象指针
};
#endif // WIDGET_H

2、文件widget.cpp
widget.cpp是对应于文件widget.h的源程序文件,内容如下:

#include "widget.h"
#include "ui_widget.h"  // UI文件widget.ui被UIC编译后生成的文件,定义了窗口UI类

Widget::Widget(QWidget *parent)  // 构造函数
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
   
    ui->setupUi(this);
}

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

3、文件widget.ui
文件widget.ui是窗口界面定义文件,是一个XML文件。它存储了界面上所有组件的属性设置、布局、信号与槽函数的关联等内容。用Qt Designer打开UI文件进行窗口界面可视化设计,保存修改后会重新生成UI文件。
4、文件ui_widget.h
构建项目时,UI文件widget.ui会被QtUIC编译为对应的C++语言头文件ui_widget.h。内容如下:

/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 6.5.2
**
** 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/QLabel>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget  // 定义Ui_Widget类,用于封装可视化设计的界面
{
   
   
public:  // 为每一个组件定义一个指针变量,变量的名称就是UI可视化设计时为组件设计的对象名称
    QLabel *label;

    void setupUi(QWidget *Widget)  // 一个输入参数Widget,是QWidget类型的指针
    {
   
   
        if (Widget->objectName().isEmpty())
            Widget->setObjectName("Widget");
        Widget->resize(241, 146);
        label = new QLabel(Widget);
        label->setObjectName("label");  // 将Widget作为label的父容器
        label->setGeometry(QRect(60, 40, 131, 61));
        QFont font;
        font.setPointSize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Agent XXX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值