一、建立窗口
建立默認UI窗口mainwindow
建立登錄窗口
命名為 LoginDlg
當完成后會自動跳轉到設計模式,對新添加的對話框進行設計。我們向界面上拖入一個Push Button
,然后更改顯示文本為“登錄到主界面”。
為了實現點擊這個按鈕后可以關閉該對話框並顯示主窗口,我們需要設置信號和槽的關聯。點擊設計模式上方的 圖標,或者按下F4,
便進入了信號和槽編輯模式。按着鼠標左鍵,從按鈕上拖向界面,如下圖所示。
這里簡單介紹一下信號和槽,大家可以把它們都看做是函數,比如這里,當單擊了按鈕以后就會發射單擊信號,即clicked()
;然后對話框接收到信號就會執行相應的操作,即執行accept()
槽。一般情況下,我們只需要修改槽函數即可,不過,這里的accept()
已經實現了默認的功能,它會將對話框關閉並返回Accepted
,所以我們無需再做更改。下面我們就是要使用返回的Accepted
來判斷是否按下了登錄按鈕。
完成后,可以按下 或者按下F3來返回控件編輯模式。
在這里,我們先添加了頭文件,創建了LoginDlg
類的對象dlg
,然后讓dlg
運行,即執行exec()
函數,並判斷對話框的返回值,(會在exec這條語句循環,直到消息信號過來)
如果是按下了登錄按鈕,那么返回值應該是Accepted
,這時就關閉dlg,顯示主窗口mainwindow,並正常執行程序;如果沒有按下登錄按鈕,那么就循環直到關閉窗口結束程序。
現在大家可以運行程序,測試一下效果。
運行結果
接下來還有一種方法,建立新的窗口不會關閉舊有窗口
我們打開mainwindow.ui
文件進入設計模式,然后在按鈕部件上單擊鼠標右鍵並選擇轉到槽菜單,如下圖所示。
在彈出的轉到槽對話框中選擇clicked()
信號並按下確定按鈕。
這時會跳轉到編輯模式mainwindow.cpp
文件的on_pushButton_clicked()
函數處,這個就是自動生成的槽,它已經在mainwindow.h
文件中進行了聲明。
我們只需要添加窗體頭文件和更改函數體即可。這里更改為:
運行結果
這個程序里我們實現了兩類窗口打開的方式,一個是自身消失而后打開另一個窗口,一個是打開另一個窗口而自身不消失。可以看到他們實現的方法是不同的。
mainwindow