當使用者在 GUI 上有任何動作,像是用滑鼠指標點擊按鈕之類的,這些動作在 Qt 中被稱為 SIGNAL , SIGNAL 發生後如果程式 (program) 要有反應,就要設定對應的 SLOT 成員函數 (member function)
我們的 GUI 中,每個按鈕都應該有相對應的專屬動作
是的,每個按鈕如都應該要有對應的專屬動作,可是實際建制起來會有點麻煩,所以這裡先不急著完成所有功能,我們先示範按下按鈕後在 label_display 顯示按下哪個按鈕囉!首先,在 New 按鈕上按滑鼠右鍵,快顯選單中有〔跳到訊號槽〕的選項
就會出現「跳到訊號槽」的對話視窗,出現一連串可以設定的信號,這裡用預設的第一個 clicked() 就可以了,最後點擊〔確定〕
接著就會跳到「編輯」的地方,下圖左邊的標頭檔 (header file) encryptwindow.h 已經宣告了一個 private slots 的函數 (function) on_pushButton_new_clicked() ,右邊的實作則是空白
這就是用 IDE 的好處囉! IDE 會直接插入必要的程式碼,省去我們很多打字的時間,另一方面我們打程式碼 (code) 時也會提供可輸入的提示,例如
由於我們是要在 label_display 顯示提示訊息,因此要用 ui 存取 label_display ,再呼叫設定文字的 setText() 成員函數,並以訊息字串 (string) 當參數 (parameter) ,如下
按左下方的執行鍵測試看看囉
一個元件的動作牽連到另一個元件,所有元件都可透過 ui 存取,簡不簡單呢?接下來我們開始整合 Encrypt 類別 (class) 囉!
中英文術語對照
程式 | program |
成員函數 | member function |
標頭檔 | header file |
程式碼 | code |
字串 | string |
參數 | parameter |
類別 | class |
重點整理
- Qt 把使用者的動作稱為 SINGAL ,程式的反應稱為 SLOT 。
- 利用 Designer 在視窗元件的快顯功能表,可直接設定信號槽,也就是 SIGNAL 跟 SLOT ,這會自動生成相對應的成員函數。
- 如果要在 label_display 顯示提示訊息,就得透過 ui 存取,再呼叫 setText() 設定文字。
問題與討論
- 如果不設定 SIGNAL 與 SLOT ,操作 GUI 像是點擊按鈕會有動作嗎?
- IDE 在打程式碼時提供所有可輸入的提示,這樣有什麼好處呢?
練習
- 繼續實作其他六個按鈕,都設定成在 label_display 顯示按了哪個按鈕。
- 承接上個單元的 guess_game 專案,兩個按鈕都設定成在下方 Text Browser 的地方顯示按鈕名稱。
the end
沒有留言:
張貼留言