ui_*.h文件中自动生成的界面类的使用方法

时间:2022-06-14 12:55:33

上篇文章介绍的有点凌乱,下面用一个简单例子介绍下界面类的使用。

ui_*.h文件中自动生成的界面类的使用方法有三种:直接使用、定义新类、派生新类。举例如下:

现有一个*.ui文件生成的ui_*.h文件如下:

#ifndef UI_HELLODIALOG_H
#define UI_HELLODIALOG_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
QT_BEGIN_NAMESPACE
class Ui_HelloDialog
{
public:
QLabel *label;
void setupUi(QDialog *HelloDialog)
{
if (HelloDialog->objectName().isEmpty())
HelloDialog->setObjectName(QString::fromUtf8("HelloDialog"));
HelloDialog->resize(238, 184);
label = new QLabel(HelloDialog);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(70, 70, 151, 31));
retranslateUi(HelloDialog);
QMetaObject::connectSlotsByName(HelloDialog);
} // setupUi
void retranslateUi(QDialog *HelloDialog)
{
HelloDialog->setWindowTitle(QApplication::translate("HelloDialog", "Dialog", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("HelloDialog", "Hello World! \344\275\240\345\245\275Qt\357\274\201", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class HelloDialog: public Ui_HelloDialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_HELLODIALOG_H

(1)直接使用Ui::HelloDialog类在主函数中定义对象

main.c

#include "ui_hellodialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog w;
Ui::HelloDialog ui;
ui.setupUi(&w);
w.show();
return a.exec();
}

(2)定义新类,在新类中定义一个Ui::HelloDialog的子对象,使用子对象加载该界面。

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private:
Ui::MyWidget *ui; //定义子对象
};
#endif // MYWIDGET_H

mywidget.cpp 在这里用子对象加载界面
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog> //鍖呭惈澶存枃浠
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show();
}
MyWidget::~MyWidget()
{
delete ui;
}
main.cpp

#include <QApplication>
#include "mywidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}

 
(3)派生新类,继承Ui::HelloDialog类 

hellodialog.h

#ifndef HELLODIALOG_H
#define HELLODIALOG_H
#include <QDialog>
#include "ui_hellodialog.h"
//不用Ui::Hellodialog 来定义子对象,因此不再需要前置声明了
//namespace Ui {
// class HelloDialog;
//}
class HelloDialog : public QDialog, public Ui::HelloDialog
{
Q_OBJECT
public:
explicit HelloDialog(QWidget *parent = 0);

signals:

public slots:
};
#endif // HELLODIALOG_H

hellodialog.cpp
#include "hellodialog.h"
#include "ui_hellodialog.h"
HelloDialog::HelloDialog(QWidget *parent) :
QDialog(parent),
Ui::HelloDialog()
{
setupUi(this);
}
main.cpp 
#include <QApplication>
#include "hellodialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
HelloDialog w;
w.show();
return a.exec();
}


以上代码经验证无误,相同的运行结果,如下:

                                                              ui_*.h文件中自动生成的界面类的使用方法