C++ 入門指南 V2.00 - 單元 28 - 跳到信號槽




當使用者在 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

重點整理


  1. Qt 把使用者的動作稱為 SINGAL ,程式的反應稱為 SLOT 。
  2. 利用 Designer 在視窗元件的快顯功能表,可直接設定信號槽,也就是 SIGNAL 跟 SLOT ,這會自動生成相對應的成員函數。
  3. 如果要在 label_display 顯示提示訊息,就得透過 ui 存取,再呼叫 setText() 設定文字。

問題與討論


  1. 如果不設定 SIGNAL 與 SLOT ,操作 GUI 像是點擊按鈕會有動作嗎?
  2. IDE 在打程式碼時提供所有可輸入的提示,這樣有什麼好處呢?

練習


  1. 繼續實作其他六個按鈕,都設定成在 label_display 顯示按了哪個按鈕。
  2. 承接上個單元的 guess_game 專案,兩個按鈕都設定成在下方 Text Browser 的地方顯示按鈕名稱。

the end

沒有留言: