QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面
效果截图:
创建上文件夹Designers,使用Designer设计三个UI界面:
First.ui
Second.ui
Third.ui
下面三个代码文件的源码:
<textarea cols="50" rows="15" name="code" class="cpp">/** Object: Designers ** Desc: Designers 在程序中使用多个UI界面 ** File: main.cpp ** Compile:qmake-qt4 -project;qmake-qt4;make; ** Author: LiXiujie www.xiujie.cn ** Date: 2011-05-20 ** Note: 编译说明: ** qmake-qt4 -prject 自动生成程序的项目文件(*.pro); ** 打开工程文件加入 FORMS += / Second.ui / First.ui / Third.ui ** qmake-qt4 用于生成程序的Makefile文件; ** make 编译 Makefile 文件得到可执行文件。 ** */ #include <QApplication> // 所有QT图形化应用程序必须包含此文件,它包含了QT图形化应用程序的各种资源、基本设置、控制流及事件处理等。 #include <QDialog> #include "MyWidget.h" // 自定义类 int main(int argc, char *argv[]){ QApplication app(argc, argv); MyWidget *dialog = new MyWidget; dialog->show(); return app.exec(); } </textarea>
<textarea cols="50" rows="15" name="code" class="cpp">/** Object: Designers ** Desc: Designers 在程序中使用多个UI界面 ** File: MyWidget.h ** Class: MyWidget ** Compile:qmake-qt4 -project;qmake-qt4;make; ** Author: LiXiujie www.xiujie.cn ** Date: 2011-05-20 ** Note: 编译说明: ** qmake-qt4 -prject 自动生成程序的项目文件(*.pro); ** qmake-qt4 用于生成程序的Makefile文件; ** make 编译 Makefile 文件得到可执行文件。 ** */ #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include "ui_First.h" #include "ui_Second.h" #include "ui_Third.h" class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); signals: public slots: void slotChild(); private: Ui::First m_firstUI; Ui::Second m_secondUI; Ui::Third m_thirdUI; }; #endif // MYWIDGET_H </textarea>
<textarea cols="50" rows="15" name="code" class="cpp">/** Object: Designers ** Desc: Designers 在程序中使用多个UI界面 ** File: MyWidget.cpp ** Class: MyWidget ** Compile:qmake-qt4 -project;qmake-qt4;make; ** Author: LiXiujie www.xiujie.cn ** Date: 2011-05-20 ** Note: 编译说明: ** qmake-qt4 -prject 自动生成程序的项目文件(*.pro); ** qmake-qt4 用于生成程序的Makefile文件; ** make 编译 Makefile 文件得到可执行文件。 ** */ #include "MyWidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent){ QTabWidget *pTabWidget = new QTabWidget(this); // TabWidget 控件, 选项卡控件 QWidget *pWidget_first = new QWidget; m_firstUI.setupUi((QDialog*)pWidget_first); QWidget *pWidget_second = new QWidget; m_secondUI.setupUi((QDialog*)pWidget_second); pTabWidget->addTab(pWidget_first, "First Tab"); // 添加一个选项卡 pTabWidget->addTab(pWidget_second, "Second Tab"); pTabWidget->resize(300, 300); // 设置控件宽长 /* 绑定UI界面中按钮点击事件处理函数 */ connect(m_firstUI.pushButton_Child, SIGNAL(clicked()), this, SLOT(slotChild())); connect(m_secondUI.pushButton_Close, SIGNAL(clicked()), this, SLOT(close())); } void MyWidget::slotChild(){ QDialog *pDialog_third = new QDialog; m_thirdUI.setupUi(pDialog_third); connect(m_thirdUI.pushButton_Close, SIGNAL(clicked()), pDialog_third, SLOT(close())); pDialog_third->exec(); // 显示对话框 } </textarea>
下面三个UI文件源码:
First.ui
<textarea cols="50" rows="15" name="code" class="cpp"><?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>First</class> <widget class="QDialog" name="First"> <property name="windowModality"> <enum>Qt::NonModal</enum> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>300</width> <height>250</height> </rect> </property> <property name="windowTitle"> <string>Dialog</string> </property> <widget class="QLabel" name="label"> <property name="geometry"> <rect> <x>100</x> <y>100</y> <width>100</width> <height>20</height> </rect> </property> <property name="text"> <string>这是第一个 UI!!</string> </property> </widget> <widget class="QPushButton" name="pushButton_Child"> <property name="geometry"> <rect> <x>200</x> <y>200</y> <width>80</width> <height>25</height> </rect> </property> <property name="text"> <string>子窗口</string> </property> </widget> </widget> <resources/> <connections/> </ui> </textarea>
Second.ui
<textarea cols="50" rows="15" name="code" class="cpp"><?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Second</class> <widget class="QDialog" name="Second"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>300</width> <height>250</height> </rect> </property> <property name="windowTitle"> <string>Second</string> </property> <widget class="QLabel" name="label"> <property name="geometry"> <rect> <x>100</x> <y>100</y> <width>100</width> <height>20</height> </rect> </property> <property name="text"> <string>这是第二个 UI!!</string> </property> </widget> <widget class="QPushButton" name="pushButton_Close"> <property name="geometry"> <rect> <x>200</x> <y>200</y> <width>80</width> <height>25</height> </rect> </property> <property name="text"> <string>关闭</string> </property> </widget> </widget> <resources/> <connections/> </ui> </textarea>
Third.ui
<textarea cols="50" rows="15" name="code" class="xhtml"><?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Third</class> <widget class="QDialog" name="Third"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>300</width> <height>250</height> </rect> </property> <property name="windowTitle"> <string>Third Dialog</string> </property> <widget class="QLabel" name="label"> <property name="geometry"> <rect> <x>100</x> <y>100</y> <width>100</width> <height>20</height> </rect> </property> <property name="text"> <string>这是第三个 UI!!</string> </property> </widget> <widget class="QPushButton" name="pushButton_Close"> <property name="geometry"> <rect> <x>200</x> <y>200</y> <width>80</width> <height>25</height> </rect> </property> <property name="text"> <string>关闭</string> </property> </widget> </widget> <resources/> <connections/> </ui> </textarea>