【QT学习笔记】QT Creator的编译系统

本文详细介绍了在Qt Creator中创建窗口类项目时,自动生成的四个关键文件的作用。特别是`widget.ui`文件,它是UI设计的源文件,而`ui_widget.h`是编译器根据UI文件生成的头文件,包含了UI元素的声明和布局信息。`Ui::Widget*ui`成员变量在构造函数中初始化,并通过`setupUi(this)`设置界面。此外,`QMetaObject::connectSlotsByName(Widget);`用于自动连接信号和槽,简化了代码编写工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用QT Creator新建一个窗口类的项目时,会自动生成四个文件

  • main.cpp
  • widget.h
  • widget.cpp
  • widget.ui

其中widget.h和widget.cpp的内容是

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

****************************************************************************
#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::Widget *ui并在构造函数中调用ui->setupUi(this)

这个Ui::Widget *ui是什么?

在QT Creator中用跳转到其定义,会发现跳转到了build目录中一个叫ui_widget.h的文件(首次需要编译一次才会出现)

ui_widget.h是编译器根据widget.ui生成的

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

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    QPushButton *pushButton;
    QPushButton *pushButton_2;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(528, 349);
        pushButton = new QPushButton(Widget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(100, 70, 93, 28));
        pushButton_2 = new QPushButton(Widget);
        pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
        pushButton_2->setGeometry(QRect(270, 70, 93, 28));

        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));
        pushButton->setText(QApplication::translate("Widget", "PushButton", nullptr));
        pushButton_2->setText(QApplication::translate("Widget", "PushButton", nullptr));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

从定义可以看到这个里面实现了weight.ui中使用到的控件,并对齐布局。

并且会调用QMetaObject::connectSlotsByName(Widget);去连接信号和槽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值