QT项目中ui_.h文件详解

QT工程中,ui_.h文件由uic工具自动生成,将.ui界面文件转换为C++类。MainWindow类的ui成员通过setupUi()设置界面,retranslateUi()用于多语言翻译。QT_BEGIN_NAMESPACE和QT_END_NAMESPACE是空宏,connectSlotsByName实现信号槽自动关联。当顶层窗口名称改变时,相应源代码需同步更新以避免编译错误。

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

在QT工程中的mainwindow.h常见的几行:

namespace Ui { 

    class MainWindow; 

    ......

private: 

    Ui::MainWindow *ui;

在QT工程中的mainwindow.cpp常见的几行:

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : 

    QMainWindow(parent), 

    ui(new Ui::MainWindow) 

    ui->setupUi(this); 

ui文件实际是xml格式的,Qt编译时,先用uic工具将mainwindow.ui编译生成ui_mainwindow.h,转化为c++类,就是 Ui::MainWindow。头文件的部分相关代码:

QT_BEGIN_NAMESPACE

class Ui_MainWindow

{

public:

    QWidget *centralWidget;

    QRadioButton *radioButton;

    QMenuBar *menuBar;

    QToolBar *mainToolBar;

    QStatusBar *statusBar;



void setupUi(QMainWindow *MainWindow)

{

if (MainWindow->objectName().isEmpty())

            MainWindow->setObjectName(QStringLiteral("MainWindow"));

        MainWindow->resize(402, 302);

        centralWidget = new QWidget(MainWindow);

        ......

void retranslateUi(QMainWindow *MainWindow)

{

   MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", nullptr));

   radioButton->setText(QApplication::translate("MainWindow", "RadioButton", nullptr));

    }

}

namespace Ui {

    class MainWindow: public Ui_MainWindow {};

}

QT_END_NAMESPACE

Note: ui_*.h文件不要修改,因为修改了也没用,下次 uic 工具会自动生成这个文件,之前的修改就被覆盖了。

从代码中可以看出在.ui文件中拖拽的控件是Ui::MainWindow类的public成员。

setupUi()成员函数,其参数是个QMainWindow指针。实际上,不拖控件而直接在mainwindow.cpp中建立控件的方法就相当于自己写setupUi函数的部分代码。

retranslateUi():重新翻译界面,如果做了多国语言翻译,这个函数可以将界面翻译成其他语言显示。

Note:QT_BEGIN_NAMESPACE 和QT_END_NAMESPACE两个宏,其实是空宏。

QMetaObject::connectSlotsByName(MainWindow)是根据信号和槽函数名称等实现自动关联的关键函数。

Ui命名空间中的 MainWindow 与继承自QMainWindow的 MainWindow 不是一回事,前者仅继承Ui_MainWindow,后者的private成员ui指针指向前者。

Note:如果在如图所示的位置将顶层窗口的名称修改了

假设修改为communication,则在MainWindow.h文件中的

namespace Ui { 

           class MainWindow; 

       } 

       class MainWindow;要修改成class communication;

在MainWindow.cpp文件中的

 MainWindow::MainWindow(QWidget *parent) : 

    QMainWindow(parent), 

    ui(new Ui::MainWindow)

    {……}

    ui(new Ui::MainWindow)需要修改为ui(new Ui::communication)

之所以这样修改是应为在设计器中修改了顶层窗口的名称则编译后生成的ui_*.h文件中的类名称也发生了相应的变化,如果不做上述相关修改将出现编译出错的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值