Qt ui在程序中的使用方式

来源:互联网 发布:马哥2016百度云python 编辑:程序博客网 时间:2024/06/07 02:52

Qt 通过Qt designer 可以生成ui文件,在使用时可利用Qt自带的uic工具生成ui.xxx.h文件进行使用。

利用Designer设计生成的ui有三种使用方式

1.直接使用法

QWidget *w  = new QWidget;

Ui::Small s;

s.setupUi(w);

w.show();

2.单继承法

#ifndef WIDGET_H
#define WIDGET_H
#include<QTabWidget>
#include<QWidget>
#include<QtGui>
#include"ui_first.h" //包含3个Ui的头文件,由Qt自动生成
#include"ui_second.h"
#include"ui_third.h"
class MyWidget:public QWidget
{
Q_OBJECT
public:
MyWidget();
~MyWidget();
private:
QTabWidget *tab;
Ui::First firstUi;//声明3个私有的窗体对象,在代码中通过对象操作窗体元素
Ui::Second secondUi;
Ui;;Third thirdUi;
private slots;
void slotChild();
};
#endif

------------------------------------------------------------------------------------------------------------

#include"widget.h"
MyWidget::MyWidget()
{
tab = new QTabWidget(this);
QWidget *w1 = new QWidget;
firstUi.setupUi(w1);
QWidget *w2 = new QWidget;
secondUi.setuoUi(w2);
tab->addWidget(w1,"First");
tab->addWidget(w2."Second");
tab->resize(300,300);
connect(firstUi.childPushButton,SIGNAL(clicked()),this,SLOT(slotChild()));
connect(secondUi.closePushButton,SIGNAL(clicked()),this,SLOT(close()));
}
MyWidget::~MyWidget()
{
QDialog *w3 = new QDialog;
thirdUi.setupUi(w3);
w3->exec();
}

----------------------------------------------------------------------------------------------------------------

3.多继承法

#include"ui_third.h"

class ThirdDialog:public QDialog,private Ui::Third

{

ThirdDiaog();

......

}

ThridDialog:ThirdDialog()

{

setupUi(this);

}

单继承与多继承方式的优缺点:

单继承在操作Ui页面上的控件时需要加上ui对象前缀,编写代码较为麻烦,但对于程序中所需要用到的ui页面较多时,使用单继承法则要简单灵活多

多继承可以直接对ui页面上的控件或函数进行操作调用,代码更加简洁。


关于动态加载ui

Qt提供了一个QtUiTools模块,包含了与ui相关的类,如QUiLoader,可以在运行中动态加载.ui文件。

实现动态加载ui,首先需要在程序中包含QtUiTools模块的头文件:

#include<QtUiTools>

并且新建一个.qrc文件,描述.ui文件的路径:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>

<file>forms/third.ui</file>

</qresource>

</RCC>

将弹出子窗口的.ui文件放在forms目录下面

在程序的.pro文件中加入以下两行代码:

CONFIG+=uitools

RESOURCES+=uiloader.qrc

最后修改slotChild()槽函数的实现代码如下:

void MyWidget::slotChild()

{

QUiLoader loader;

QFile file(":/forms/third.ui");

file.open(QFile::ReadOnly);

QWidget *third = loader.load(&file);

file.close();

third->show();

}

动态加载的方式不用生成ui_third.h文件,在程序运行时才会被加载,采用这种方式的最大好处是可以在不重新编译程序的情况下,改变窗口的布局和显示,但在主程序中无法对子窗口的空间进行操作。


原创粉丝点击