首先介绍ui的文件,Qt 通过Qt designer 可以生成ui文件,ui文件以XML的方式记录了designer生成界面的相关内容(大体内容包括widget的属性,其内容的相关属性,头文件,变量,槽,函数)。在使用designer创建的form(也就是ui文件)最后在qmake的时候转换成c++代码。qmake能够检测到窗体文件(*.ui件), 通过uic(user interface compiler)可以把ui文件内容翻译成标准的.h,.cpp文件,并存放在ui_xxx.h文件中。该文件给出了Dialog对应类的完整定义,类名为Ui_Dialog,并包含一个setupUi()成员函数,用于初使化form。在该头文件的最后,使用一个Ui命名空间将该Ui_Dialog类包含进来,并派生出名为Dialog的子类,而Ui::Dialog就成为Designer设计的界面对外的接口了。
利用Designer设计生成ui的3种使用方式
1.直接使用法
QWidget * w = new QWidget;
Ui::Small s;
s.setupUi(w);
w.show();
2.单继承法
- //widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QTabWidget>
- #include <QWidget>
- #include <QtGui>
- #include "ui_first.h" //包含3个ui的头文件
- #include "ui_second.h"
- #include "ui_third.h"
- class MyWidget:public QWidget{
- Q_OBJECT
- public:
- MyWidget();
- ~MyWidget();
- private:
- QTabWidget *tab;
- Ui::First firstUi; //在MyWidget类中声明了3个私有的窗体对象,
- Ui::Second secondUi; // 我们在代码中会通过该对象操作窗体元素
- Ui::Third thirdUi;
- private slots:
- void slotChild();
- };
- #endif
- //widget.cpp
- #include "widget.h"
- MyWidget::MyWidget(){
- tab = new QTabWidget(this);
- QWidget *w1 = new QWidget; //首先新建QWidget对象,以此QWidget对象为参数
- firstUi.setupUi(w1); //调用第一个ui的setupUi(),生成第一个ui界面
- QWidget *w2 = new QWidget;
- secondUi.setupUi(w2);
- tab->addTab(w1,"First");
- tab->addTab(w2,"Second");
- tab->resize(300,300);
- connect(firstUi.childPushButton,SIGNAL(clicked()),this,SLOT(slotChild()));
- connect(secondUi.closePushButton,SIGNAL(clicked()),this,SLOT(close()));
- }
- MyWidget::~MyWidget(){
- }
- void MyWidget::slotChild(){
- QDialog *w3 = new QDialog;
- thirdUi.setupUi(w3);
- w3->exec();
- }
3.多继承法
- #include "ui_third.h"
- class ThirdDialog: public QDialog, private Ui::Third{
- ThirdDialog();
- ......
- }
- ThirdDialog:ThirdDialog(){
- setupUi(this);
- }
- 从以上 对 两种继承方式的分析可见,多继承方式可以直接对ui页面上的控件或函数进行操作调用,代码编写更
-
加简介;而使用单继承方式,在操作ui页面上的控件时需要加上ui对象前缀,编写代码较为麻烦,但对于程序
中所需用到的ui页面较多时,使用单继承法则要简单灵活的多。