encrypt_gui 專案 (project) 中包括兩個標頭檔 (header file) 、兩個實作檔,以及一個介面檔案
其中 encrypt.h 及 encrypt.cpp 在「軟體開發篇」發展完成, encryptwindow.ui 在「單元 27 - 設計介面」發展,其餘便是實作每個按鈕的功能, New 、 Save 、 Load 、 Encode 及 Decode 均已完成,現在就剩下 Clear 與 Copy 了。
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 |
重點整理
- encrypt_gui 包含五個檔案,兩個標頭檔、兩個實作檔及一個介面檔案。
- Clear 按鈕的工作就是把暫存變數及輸出入欄位都設定為空字串。
- Copy 按鈕則是利用 QClipboard 將編碼結果複製到系統剪貼簿。
- 針對兩個文字方塊另外設置與使用者互動的模式。
問題與討論
- Clear 按鈕用來清除所有輸入,那 e 要不要重新設定為 NULL ?
- 除了把 lineEdit_output 鎖起來外,還有其他適合的方法嗎?
練習
- 承接上一個單元的 guess_game 專案,這個專案雖然已經完成,並不意味著開發終止,想一想完整的猜數字遊戲應該要有哪些功能、怎麼樣的使用者介面。
- 承上題,另開一個專案如 guess_game2 ,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。
the end
沒有留言:
張貼留言