1. 程式人生 > >Qt Creator多視窗程式編寫

Qt Creator多視窗程式編寫

天重新開工,剛剛進行了Qt Creator的多視窗程式的學習,是參考網上的一些資料做的。程式的功能是程式開始出現一個對話方塊,按下按鈕後便能進入主視窗,如果直接關閉這個對話方塊,便不能進入主視窗,整個程式也將退出。當進入主視窗後,我們按下按鈕,會彈出一個對話方塊,無論如何關閉這個對話方塊,都會回到主視窗。現在我們具體的來做這個實驗。

1. 新建Qt4 Gui Application工程,工程名為MultiWindow,Base class選為QWidget。建立好後工程檔案列表如下圖。

Qt <wbr>Creator多視窗程式編寫

2.新建對話方塊類,如下圖,選擇Qt Designer Form Class。

Qt <wbr>Creator多視窗程式編寫

3.選擇Dialog without Buttons。

Qt <wbr>Creator多視窗程式編寫

4.類名設為xyDlg。

Qt <wbr>Creator多視窗程式編寫

5.點選Finish完成。注意這裡已經預設將其加入到了我們剛建的工程中了。新增前後工程新增的內容如下圖所示。

Qt <wbr>Creator多視窗程式編寫

新增前
Qt <wbr>Creator多視窗程式編寫

新增後

6.如下圖,在xydlg.ui中拖入一個Push Button,將其上的文字改為“進入主視窗”,在其屬性視窗中將其objectName改為enterBtn,在下面的Signals and slots editor中進行訊號和槽的關聯,其中,Sender設為enterBtn,Signal設為clicked(),Receive設為xyDlg,Slot設為accept()。這樣就實現了單擊這個按鈕使這個對話方塊關閉併發出Accepted訊號的功能。下面我們將利用這個訊號。

Qt <wbr>Creator多視窗程式編寫

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是否被按下
    {

        w.show();                        //如果被按下,顯示主視窗
        return a.exec();                 //程式一直執行,直到主視窗關閉
    }
    else return 0;                       //如果沒被按下,則不會進入主視窗,整個程式結束執行
}

    主函式必須這麼寫,才能完成所要的功能

8.如下圖,在主視窗加入按鈕,顯示文字為“Go to SubWindow”,在其上點選滑鼠右鍵,在彈出的選單中選擇go to slot。

Qt <wbr>Creator多視窗程式編寫

Qt <wbr>Creator多視窗程式編寫

9.我們選擇單擊事件clicked()。

Qt <wbr>Creator多視窗程式編寫

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

    到這裡,再執行程式,便能完成我們實驗要求的功能了。看一下效果圖:

     Qt <wbr>Creator多視窗程式編寫 Qt <wbr>Creator多視窗程式編寫 Qt <wbr>Creator多視窗程式編寫

      整個程式裡,我們用兩種方法實現了訊號和槽函式的關聯,第一個按鈕我們直接在設計器中實現其關聯;第二個按鈕我們自己寫了槽函式語句,其實圖形的設計與直接寫程式碼效果是一樣的。這個程式裡我們實現了兩類視窗開啟的方式,一個是自身消失而後開啟另一個視窗,一個是開啟另一個視窗而自身不消失。可以看到他們實現的方法是不同的。

Reference: