Qt Creator多視窗程式編寫
天重新開工,剛剛進行了Qt Creator的多視窗程式的學習,是參考網上的一些資料做的。程式的功能是程式開始出現一個對話方塊,按下按鈕後便能進入主視窗,如果直接關閉這個對話方塊,便不能進入主視窗,整個程式也將退出。當進入主視窗後,我們按下按鈕,會彈出一個對話方塊,無論如何關閉這個對話方塊,都會回到主視窗。現在我們具體的來做這個實驗。
1. 新建Qt4 Gui Application工程,工程名為MultiWindow,Base class選為QWidget。建立好後工程檔案列表如下圖。
2.新建對話方塊類,如下圖,選擇Qt Designer Form Class。
3.選擇Dialog without Buttons。
4.類名設為xyDlg。
5.點選Finish完成。注意這裡已經預設將其加入到了我們剛建的工程中了。新增前後工程新增的內容如下圖所示。
新增後
6.如下圖,在xydlg.ui中拖入一個Push Button,將其上的文字改為“進入主視窗”,在其屬性視窗中將其objectName改為enterBtn,在下面的Signals and slots editor中進行訊號和槽的關聯,其中,Sender設為enterBtn,Signal設為clicked(),Receive設為xyDlg,Slot設為accept()。這樣就實現了單擊這個按鈕使這個對話方塊關閉併發出Accepted訊號的功能。下面我們將利用這個訊號。
7.修改主函式main.cpp,如下:
#include <QtGui/QApplication>
#include "widget.h"
#include "xydlg.h" //加入標頭檔案
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
xyDlg xy1; //建立自己新建的類的物件xy1
if(xy1.exec()==QDialog::Accepted) //利用Accepted訊號判斷enterBtn是否被按下
{
return a.exec(); //程式一直執行,直到主視窗關閉
}
else return 0; //如果沒被按下,則不會進入主視窗,整個程式結束執行
}
主函式必須這麼寫,才能完成所要的功能。
8.如下圖,在主視窗加入按鈕,顯示文字為“Go to SubWindow”,在其上點選滑鼠右鍵,在彈出的選單中選擇go to slot。
9.我們選擇單擊事件clicked()。
10.我們在彈出的槽函式中新增一句:
xy2.show();
xy2為我們新建對話方塊類的另一個物件,但是xy2我們還沒有定義,所以在widget.h檔案中新增相應程式碼,如下,先加入標頭檔案,再加入my2的定義語句,這裡我們將其放到private裡,因為一般的函式都放在public裡,而變數都放在private裡。
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include "xydlg.h" //包含標頭檔案
namespace Ui
{
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
xyDlg xy2; //對my2進行定義
private slots:
void on_pushButton_clicked();
};
#endif // WIDGET_H
到這裡,再執行程式,便能完成我們實驗要求的功能了。看一下效果圖:
整個程式裡,我們用兩種方法實現了訊號和槽函式的關聯,第一個按鈕我們直接在設計器中實現其關聯;第二個按鈕我們自己寫了槽函式語句,其實圖形的設計與直接寫程式碼效果是一樣的。這個程式裡我們實現了兩類視窗開啟的方式,一個是自身消失而後開啟另一個視窗,一個是開啟另一個視窗而自身不消失。可以看到他們實現的方法是不同的。
Reference: