C++ 入門指南 V2.00 - 單元 32 - 完成版的 encrypt_gui




encrypt_gui 專案 (project) 中包括兩個標頭檔 (header file) 、兩個實作檔,以及一個介面檔案



其中 encrypt.hencrypt.cpp 在「軟體開發篇」發展完成, encryptwindow.ui 在「單元 27 - 設計介面」發展,其餘便是實作每個按鈕的功能, NewSaveLoadEncodeDecode 均已完成,現在就剩下 ClearCopy 了。


Clear 按鈕的目的是清空所有欄位,我們對 on_pushButton_clear_clicked() 的實作如下


146 // 按下 Clear 按鈕的事件
147 void EncryptWindow::on_pushButton_clear_clicked()
148 {
149    // 將暫存變數及輸出入欄位都設成空字串
150    input_text = "";
151    output_text = "";
152    ui->lineEdit_input->setText("");
153    ui->lineEdit_output->setText("");
154
155    ui->label_display->setText("Clear all!!");
156 }

完整程式請參考 encryptwindow.cpp

簡單講, Clear 按鈕的工作就是把暫存變數 (variable) 及輸出入欄位都設定為空字串 (string) 。


至於 Copy 按鈕則是把編碼結果拷貝到系統剪貼簿,這就要利用到 QClipboard 類別了,需要先 #include 進來


006 #include <QClipboard>

on_pushButton_copy_clicked() 的實作如下


158 // 按下 Copy 按鈕的事件
159 void EncryptWindow::on_pushButton_copy_clicked()
160 {
161    // QClipboard 物件將文字拷貝到系統剪貼簿
162    QClipboard *clipboard = QApplication::clipboard();
163    clipboard->setText(output_text);
164    ui->label_display->setText("The result is copied to clipboard.");
165
166 }

先建立 QClipboard 型態 (type) 的物件 (object) clipboard ,然後把 output_text 設定給 clipboard ,透過 clipboard 編碼結果就拷貝到系統剪貼簿了。


按鈕功能都已實作完成,那我們的 encrypt_gui 專案就此完成了嗎?說完成了也可以,倒是可以再想想兩個文字輸入方塊與使用者之間的互動。


文字方塊原本是拿來給使用者輸入文字用的,可是我們把輸出結果放在 lineEdit_output ,也就是說 lineEdit_output 並沒有要讓使用者輸入,如果使用者在這裡輸入文字的話,那程式要有什麼反應呢?


或者直接把 lineEdit_output 鎖起來,也就是這個地方不給使用者輸入任何文字,這樣我們回到 Designer 點選 lineEdit_output ,然後到右下角找到 QWidget 的地方,有一欄已勾選的 enabled



我們取消勾選,這樣 lineEdit_output 就會鎖起來不能輸入了



繼續看到 lineEdit_input ,這是給使用者輸入的文字方塊,我們多設計一個與使用者之間互動,按滑鼠右鍵點擊〔跳到訊號槽〕



這裡選擇實作 textChanged() ,這是當 lineEdit_input 裡頭文字有任何改變的 SLOT 成員函數 (member function)



實作如下


168 // 輸入文字的事件
169 void EncryptWindow::on_lineEdit_input_textChanged(const QString &arg1)
170 {
171    ui->label_display->setText("Your input is \"" + arg1 + "\".");
172 }

on_lineEdit_input_textChanged() 的參數 (parameter) arg1 就是使用者輸入的字串,我們就直接在 label_display 顯示使用者的輸入囉!重新執行,結果如下



好了, encrypt_gui 專案的所有功能大體完成,下一步是?


中英文術語對照


專案 project
標頭檔 header file
變數 variable
字串 string
型態 type
物件 object
成員函數 member function
參數 parameter

重點整理


  1. encrypt_gui 包含五個檔案,兩個標頭檔、兩個實作檔及一個介面檔案。
  2. Clear 按鈕的工作就是把暫存變數及輸出入欄位都設定為空字串。
  3. Copy 按鈕則是利用 QClipboard 將編碼結果複製到系統剪貼簿。
  4. 針對兩個文字方塊另外設置與使用者互動的模式。

問題與討論


  1. Clear 按鈕用來清除所有輸入,那 e 要不要重新設定為 NULL
  2. 除了把 lineEdit_output 鎖起來外,還有其他適合的方法嗎?

練習


  1. 承接上一個單元的 guess_game 專案,這個專案雖然已經完成,並不意味著開發終止,想一想完整的猜數字遊戲應該要有哪些功能、怎麼樣的使用者介面。
  2. 承上題,另開一個專案如 guess_game2 ,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。

the end

沒有留言: