.ui文件 c语言,ui_*.h文件中自动生成的界面类的使用方法

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

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

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

#ifndef UI_HELLODIALOG_H

#define UI_HELLODIALOG_H

#include

#include

#include

#include

#include

#include

#include

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

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 //鍖呭惈澶存枃浠

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

#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

#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

#include "hellodialog.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

HelloDialog w;

w.show();

return a.exec();

}

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

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值