1.
新建Qt Widgets Application
,
項目名稱為login1
,在類信息頁面保持類名和基類為MainWindow
和QMainWindow
不變,取消選擇創建界面選項,如下圖所示。
這里我們依然創建了Qt Widgets
應用,但是沒有使用界面文件,這樣就需要使用代碼來實現界面。當然,如果有的童鞋說,純代碼編寫就得是所有文件都自己寫,如果你也有這種BT
想法,那么就老老實實創建一個空項目,然后往里面添加main.cpp
等文件吧,如果真想回到古時候,還可以參考《Qt Creator
快速入門》第2
章的后半部分,上面還講到了使用記事本和命令行來編寫編譯程序,滿足你的自虐心理。
2.
創建登錄對話框類。
往項目中添加新文件,模板選擇C++
分類中的C++ Class
,如下圖所示。
在類定義頁面,將類名設置為LoginDialog
,基類選擇Custom
定制,然后手動設置為QDialog
。如下圖所示。
設置完成后,先打開logindialog.h
文件,將其內容修改如下圖所示。
這里先添加了QDialog
類的頭文件,然后前置聲明了QLabel
、QLineEdit
和QPushButton
類,這是因為在下面只是定義了這些類對象的指針,並不需要該類完整的定義,所以可以將它們的包含語句放到源文件中進行。在LoginDialog
類聲明的開始需要添加Q_OBJECT
宏才能使用信號和槽等元對象系統功能。在private
部分定義了一些界面上需要的部件對象的指針。下面到logindialog.cpp
文件中對這些部件對象進行初始化,其內容如下圖所示。
這里定義了構造函數和析構函數,在構造函數中對界面部件進行了初始化,設置了它們的位置及要顯示的文本,這些代碼實現的效果與前面在設計模式設置部件實現的效果是一樣的。簡單舉例:move(70, 80)
就是將部件左上角的坐標設置為(70, 80)
,這個坐標是父窗口部件的,這里就是登錄對話框,對話框的左上角是(0, 0)
點;setText()
就是設置顯示文本;setPlaceholderText()
是設置占位符文本。
下面打開main.cpp
文件,在其中使用登錄對話框,更改代碼如下圖所示。
這里的代碼與前面例子中是一樣的。現在運行程序,已經可以顯示出登錄界面了。
3
、實現功能
下面來實現兩個按鈕的功能,在Qt
中,按鈕按下功能是通過信號和槽來實現的,在前面的內容中我們已經看到三種方式來關聯信號和槽了,下面來看下怎么使用代碼自定義槽,然后手動進行關聯。
首先在logindialog.h
文件的類聲明的最后添加如下代碼:
private
slots
:
void
login();
這樣便聲明了一個槽,其實槽就是一個函數,一般使用slots
關鍵字,但在Qt 5
新關聯語法下也可以不使用該關鍵字,那么就可以像聲明一般函數一樣來聲明槽,具體的內容我們將在后面章節中講解,這里大家有個印象即可,一般建議使用slots
關鍵字。
下面打開logindialog.cpp
文件,在構造函數的最后添加如下圖所示的兩行代碼。
這里的connect()
函數就是用來關聯信號和槽的,簡單來說,第一個參數就是發射信號的部件,比如這里的loginBtn
按鈕;第二個參數是發射的信號,比如這里是QPushButton
類的單擊clicked()
信號;第三個參數是接受信號的部件,比如這里是this
即本部件也就是LoginDialog
;第四個參數是要執行的槽,比如這里是LoginDialog
類的login()
。使用connect()
函數就相當於以前在設計模式進行的關聯設置。
下面在logindialog.cpp
文件最后添加槽的定義,如下圖所示。
這里與前面示例中的代碼是一樣的,只不過usrLineEdit
等部件調用不再需要使用ui
對象。現在可以運行程序,已經實現了與使用設計模式相同的功能(密碼顯示樣式可以在構造函數中使用pwdLineEdit->setEchoMode(QLineEdit::Password)
來設置)。