C++ 入門指南

單元 32 - 完成版的 encrypt_gui

本書已有新版,請參考 C++ 入門指南 4.01 - 單元 31 - 完成版的 encrypt_gui

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

encrypt_gui
     enctypt.h
     encryptwindow.h
     encrypt.cpp
     encryptwindow.cpp
     encryptwindow.ui

其中 encrypt.hencrypt.cpp 在「軟體開發篇」發展完成, encryptwindow.ui 在「單元 27 - 設計介面」發展,其餘便是實作每個按鈕的功能, 新建儲存載入編碼解碼 均已完成,現在就剩下 清除拷貝 了。

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

// 按下「清除」按鈕的事件
void EncryptWindow::on_pushButton_clear_clicked()
{
    // 將暫存變數及輸出入欄位都設成空字串
    input_text = "";
    output_text = "";
    ui->lineEdit_input->setText("");
    ui->lineEdit_output->setText("");
    // 將 e 設定為 nullptr
    e = nullptr;
    
    ui->label_display->setText(""已清除所有內容。"");
}

完整程式請參考 encryptwindow.cpp

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

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

#include <QClipboard>

on_pushButton_copy_clicked() 的實作如下

// 按下「拷貝」按鈕的事件
void EncryptWindow::on_pushButton_copy_clicked()
{
    // QClipboard 物件將文字拷貝到系統剪貼簿
    QClipboard *clipboard = QApplication::clipboard();
    clipboard->setText(output_text);
    ui->label_display->setText("已拷貝結果到剪貼簿。");
}

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

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

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

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

-qt_complete01-

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

-qt_complete02-

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

-qt_complete03-

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

-qt_complete04-

實作如下

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

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

-qt_complete05-

好了, 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 ,重新設計介面,實作構思好的功能,使之成為猜數字遊戲的另一個版本。

上一頁 單元 31 - 存檔與載入
回 C++ 入門指南目錄
下一頁 單元 33 - 下一步
回 C++ 教材
回程式語言教材首頁