
我們接下來繼續把 GUIDemo 的功能完成,還有兩個按鈕 Clear 與 Copy 沒有實作功能。我們打算用 clearContact() 建置 Clear 的功能,另外用 copyContact() 建置 Copy 的功能,因此要在 GUIDemo.h 加入這兩個函數成員 (function member) 的宣告,修改過後的 GUIDemo.h 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #ifndef GUIDEMO_H #define GUIDEMO_H #include <QWidget> #include "Encrypt.h" class QLabel; class QLineEdit; class QPushButton; class GUIDemo : public QWidget { Q_OBJECT public : GUIDemo(QWidget *parent = 0); QString s2q( const string &); string q2s( const QString &); public slots: void newEncrypt(); void loadEncrypt(); void saveEncrypt(); void encodeContact(); void decodeContact(); void clearContact(); void copyContact(); void inputContact(); private : QLabel *display; QLineEdit *inputField; QLineEdit *outputField; QPushButton *newButton; QPushButton *loadButton; QPushButton *saveButton; QPushButton *encodeButton; QPushButton *decodeButton; QPushButton *clearButton; QPushButton *copyButton; QString inputText; QString outputText; Encrypt *e; }; #endif /* 《程式語言教學誌》的範例程式 檔名:GUIDemo.h 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2012 年 10 月 */ |
clearContact() 很簡單,我們把 inputText 、 outputText 、 inputField 與 outputField 都設定成空字串 (string) 就達到清空的目的,然後在 display 顯示提示訊息
void GUIDemo::clearContact() { inputText = "" ; outputText = "" ; inputField->setText( "" ); outputField->setText( "" ); display->setText( "This is Clear button." ); } |
而實作 copyContact() 需要用到 QClipboard ,因此 GUIDemo.cpp 的開頭要先引入這個程式庫 (library)
#include <QClipboard> |
首先建立 QClipboard 的物件 (object) ,然後呼叫 setText() 並以 outputText 當參數 (parameter) ,這樣編碼結果就複製到系統剪貼簿了
void GUIDemo::copyContact() { QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(outputText); display->setText( "This is Copy button. Result is copied to clipboard." ); } |
完整的實作檔 GUIDemo.cpp 如下,記得要把 Clear 、 Copy 兩個按鈕建立 connect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | #include <QtGui> #include "GUIDemo.h" #include <QFile> #include <QDataStream> #include <QClipboard> GUIDemo::GUIDemo(QWidget *parent) : QWidget(parent) { QLabel *input = new QLabel(tr( "Input:" )); QLabel *output = new QLabel(tr( "Output:" )); display = new QLabel(tr( "something happened" )); inputField = new QLineEdit; connect(inputField, SIGNAL(returnPressed()), this , SLOT(inputContact())); outputField = new QLineEdit; outputField->setReadOnly( true ); newButton = new QPushButton(tr( "New" )); connect(newButton, SIGNAL(clicked()), this , SLOT(newEncrypt())); loadButton = new QPushButton(tr( "Load" )); connect(loadButton, SIGNAL(clicked()), this , SLOT(loadEncrypt())); saveButton = new QPushButton(tr( "Save" )); connect(saveButton, SIGNAL(clicked()), this , SLOT(saveEncrypt())); encodeButton = new QPushButton(tr( "Encode" )); connect(encodeButton, SIGNAL(clicked()), this , SLOT(encodeContact())); decodeButton = new QPushButton(tr( "Decode" )); connect(decodeButton, SIGNAL(clicked()), this , SLOT(decodeContact())); clearButton = new QPushButton(tr( "Clear" )); connect(clearButton, SIGNAL(clicked()), this , SLOT(clearContact())); copyButton = new QPushButton(tr( "Copy" )); connect(copyButton, SIGNAL(clicked()), this , SLOT(copyContact())); QGridLayout *layout = new QGridLayout; layout->addWidget(input, 0, 0); layout->addWidget(inputField, 0, 1, 1, 6, 0); layout->addWidget(output, 1, 0); layout->addWidget(outputField, 1, 1, 1, 6, 0); layout->addWidget(newButton, 2, 0); layout->addWidget(loadButton, 2, 1); layout->addWidget(saveButton, 2, 2); layout->addWidget(encodeButton, 2, 3); layout->addWidget(decodeButton, 2, 4); layout->addWidget(clearButton, 2, 5); layout->addWidget(copyButton, 2, 6); layout->addWidget(display, 3, 0, 1, 7, 0); setLayout(layout); setWindowTitle(tr( "GUIDemo" )); e = NULL; } void GUIDemo::newEncrypt() { e = new Encrypt; display->setText( "This is New button. Encrypt code is " + s2q(e->getcArray())); } void GUIDemo::loadEncrypt() { QFile file( "encryptor" ); if (file.open(QIODevice::ReadOnly)) { QDataStream in(&file); QString temp; in >> temp; if (e == NULL) { e = new Encrypt; e->setcArray(q2s(temp)); } else { e->setcArray(q2s(temp)); } display->setText( "This is Load button. Encrypt object is loaded." ); } else { display->setText( "This is Load button. Encrypt object is not loaded." ); } } void GUIDemo::saveEncrypt() { if (e != NULL) { QFile file( "encryptor" ); file.open(QIODevice::WriteOnly); QDataStream out(&file); out << s2q(e->getcArray()); display->setText( "This is Save button. Encrypt object is saved." ); } else { display->setText( "This is Save button. There is no Encrypt Object." ); } } void GUIDemo::encodeContact() { inputText = inputField->text(); if (inputText == "" ) { display->setText( "This is Encode button. No input string!!" ); } else { if (e == NULL) { display->setText( "This is Encode button. No Encrypt object!!" ); } else { outputText = s2q(e->toEncode(q2s(inputText))); outputField->setText(outputText); display->setText( "This is Encode button. The result is above." ); } } } void GUIDemo::decodeContact() { inputText = inputField->text(); if (inputText == "" ) { display->setText( "This is Encode button. No input string!!" ); } else { if (e == NULL) { display->setText( "This is Encode button. No Encrypt object!!" ); } else { outputText = s2q(e->toDecode(q2s(inputText))); outputField->setText(outputText); display->setText( "This is Decode button. The result is above." ); } } } void GUIDemo::clearContact() { inputText = "" ; outputText = "" ; inputField->setText( "" ); outputField->setText( "" ); display->setText( "This is Clear button." ); } void GUIDemo::copyContact() { QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(outputText); display->setText( "This is Copy button. Result is copied to clipboard." ); } void GUIDemo::inputContact() { inputText = inputField->text(); display->setText( "Your input is '" + inputText + "'." ); } QString GUIDemo::s2q( const string &s) { return QString(QString::fromLocal8Bit(s.c_str())); } string GUIDemo::q2s( const QString &s) { return string(( const char *)s.toLocal8Bit()); } /* 《程式語言教學誌》的範例程式 檔名:GUIDemo.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2012 年 10 月 */ |
重新編譯執行, Clear ok

Copy 也 ok

好了,我們已經學完開發 GUIDemo 了,下一步是?
中英文術語對照 | |
---|---|
類別 | class |
函數成員 | function member |
字串 | string |
程式庫 | library |
物件 | object |
參數 | parameter |
您可以繼續參考
GUI 篇
相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁
參考資料
Qt Developer Network
沒有留言:
張貼留言