版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、實驗四 Qt編寫簡單的計算器一、 【實驗目的】1) 熟悉QtCreator的簡單操作。2) 了解Qt程序編寫框架。3) 了解信號和槽機制,熟練掌握信號與槽在應用程序中的使用。二、 【實驗內(nèi)容】1) 查看API手冊,學習簡單的Qt類的使用,如QLineEdit、QPushButton等。2) 用QtCreator創(chuàng)建工程,用Qt編寫計算器程序。3) 對計算器程序進行移植。三、 【實驗步驟】1. 創(chuàng)建工程1) 打開QtCreator,如圖1所示。圖12) 選擇File-New File or Project,然后在彈出的對話框中選擇Other Project-Empty Qt project(如圖
2、2所示),然后進入下一步。圖23) 定義新工程的工程名并選擇保存路徑(如圖3所示),然后進入下一步。圖34) 選擇Qt版本,這里選擇使用Qt4.7.1,取消對Qt in PATH的選擇(如圖4所示),然后進入下一步,完成新工程的創(chuàng)建(如圖5所示)。圖4圖52. 計算器程序的實現(xiàn)計算器程序主要分以下兩部分工作:一是實現(xiàn)計算器的圖形界面;二是實現(xiàn)按鍵事件和該事件對應的功能綁定,即信號和對應處理槽函數(shù)的綁定。1) 計算器圖形界面的實現(xiàn)通過分析計算器的功能我們可知,需要16個按鍵和一個顯示框,同時考慮到整體的排布,還需要水平布局器和垂直布局器。通過組織這些類我們可以實現(xiàn)一個簡單的帶有數(shù)字09,可以進行
3、簡單四則運算且具有清屏功能的計算器。對于這些類的具體操作會在后面的代碼中詳細說明。2) 信號和對應槽函數(shù)的綁定分析計算器的按鍵我們可以把按鍵事件分為以下三類,一是簡單的數(shù)字按鍵,主要進行數(shù)字的錄入,這類按鍵包括按鍵09;二是運算操作鍵,用于輸入數(shù)學運算符號,進行數(shù)學運算和結(jié)果的顯示,這類按鍵包括“+”,“-”,“*”,“/”,“=”;三是清屏操作鍵,用于顯示框顯示信息的清除。3) 進入剛才創(chuàng)建的空工程,雙擊左側(cè)的C,在主編輯框中目前顯示C的內(nèi)容為空,如圖6所示。這是因為目前什么文件都沒有添加的緣故。圖64) 添加文件calculator.h在
4、工程Calculator上面點擊右鍵,然后點擊Add New,選擇添加C+ Header File(如圖7所示),進入下一步后輸入文件名calculator.h(如圖8所示),然后完成文件的添加。圖7圖85) 添加文件calculator.cpp和main.cpp與添加文件calculator.h的過程類似,只是在選擇文件類型時選擇為C+ Source File。完成后可以查看C文件的內(nèi)容,整個工程的文件結(jié)構(gòu)如圖9所示。圖93. 計算器程序源代碼的分析說明1) 對calculator.h源代碼的簡要說明#ifndef CALCULATOR_H#define CALCU
5、LATOR_H /對calculator.h頭文件的聲明#include/包含主窗體類#include/包含按鍵類#include/包含垂直布局器類#include/包含水平布局器類#include/包含顯示框類class Calculator : publicQWidget/計算器繼承自主窗體類 Q_OBJECT /必須加上這句,如果要調(diào)用信號,槽函數(shù)的操作的話public: Calculator(); /計算器類的構(gòu)造函數(shù) Calculator(); /計算器類的析構(gòu)函數(shù)public slots: /定義各個按鍵按下后對應操作處理的槽函數(shù)voidzeroButtonPress();void
6、oneButtonPress();voidtwoButtonPress();voidthreeButtonPress();voidfourButtonPress();voidfiveButtonPress();voidsixButtonPress();voidsevenButtonPress();voideightButtonPress();voidnineButtonPress();voidaddButtonPress();voidsubButtonPress();voidmulButtonPress();voiddivButtonPress();voidclearButtonPress()
7、;voidequButtonPress();private:QLineEdit *operateEdit;/聲明顯示框QPushButton *zeroButton;/聲明數(shù)字按鍵QPushButton *oneButton;QPushButton *twoButton;QPushButton *threeButton;QPushButton *fourButton;QPushButton *fiveButton;QPushButton *sixButton;QPushButton *sevenButton;QPushButton *eightButton;QPushButton *nineB
8、utton;QPushButton *clearButton;/聲明運算符按鍵QPushButton *addButton;QPushButton *subButton;QPushButton *divButton;QPushButton *mulButton;QPushButton *equButton;QHBoxLayout *firstLayout;/聲明水平布局器,該布局器主要對16個按鍵進行布局QHBoxLayout *secondLayout;QHBoxLayout *thirdLayout;QHBoxLayout *fourthLayout;QVBoxLayout *mainLa
9、yout;/聲明垂直布局器,該布局器主要對主窗體上面的空間進行排布QString input1;/計算器第一個運算操作數(shù)QString input2;/計算器第二個運算操作數(shù)char operate;/運算符;#endif/ CALCULATOR_H2) 對calculator.cpp源代碼的簡要說明首先是構(gòu)造函數(shù)的實現(xiàn):Calculator:Calculator()operateEdit = newQLineEdit(this);/初始化顯示框operateEdit-setReadOnly(true); /設置顯示框為只讀operateEdit-setText(tr(0);/初始化顯示框顯示
10、數(shù)據(jù)為0zeroButton = newQPushButton;/初始化按鍵zeroButton-setText(tr(0);/設置按鍵上顯示的標簽,以下對按鍵相關(guān)的操作類似oneButton = newQPushButton;oneButton-setText(tr(1);twoButton = newQPushButton;twoButton-setText(tr(2);threeButton = newQPushButton;threeButton-setText(tr(3);fourButton = newQPushButton;fourButton-setText(tr(4);fiv
11、eButton = newQPushButton;fiveButton-setText(tr(5);sixButton = newQPushButton;sixButton-setText(tr(6);sevenButton = newQPushButton;sevenButton-setText(tr(7);eightButton = newQPushButton;eightButton-setText(tr(8);nineButton = newQPushButton;nineButton-setText(tr(9);clearButton = newQPushButton;clearBu
12、tton-setText(tr(Clear);addButton = newQPushButton;addButton-setText(tr(+);subButton = newQPushButton;subButton-setText(tr(-);mulButton = newQPushButton;mulButton-setText(tr(*);divButton = newQPushButton;divButton-setText(tr(/);equButton = newQPushButton;equButton-setText(tr(=);firstLayout = newQHBox
13、Layout;/初始化水平布局器firstLayoutfirstLayout-addWidget(zeroButton); /把按鍵zeroButton添加到firstLayoutfirstLayout-addWidget(oneButton); /把按鍵oneButton添加到firstLayoutfirstLayout-addWidget(twoButton); /把按鍵twoButton添加到firstLayoutfirstLayout-addWidget(addButton); /把按鍵threeButton添加到firstLayout,以下對水平布局器的操作類似secondLayou
14、t = newQHBoxLayout;secondLayout-addWidget(threeButton);secondLayout-addWidget(fourButton);secondLayout-addWidget(fiveButton);secondLayout-addWidget(subButton);thirdLayout = newQHBoxLayout;thirdLayout-addWidget(sixButton);thirdLayout-addWidget(sevenButton);thirdLayout-addWidget(eightButton);thirdLayo
15、ut-addWidget(mulButton);fourthLayout = newQHBoxLayout;fourthLayout-addWidget(nineButton);fourthLayout-addWidget(clearButton);fourthLayout-addWidget(equButton);fourthLayout-addWidget(divButton);mainLayout = newQVBoxLayout(this);/初始化垂直布局器mainLayoutmainLayout-addWidget(operateEdit); /把顯示數(shù)據(jù)框operateEdit加
16、到mainLayoutmainLayout-addLayout(firstLayout); /把水平布局器firstLayout添加到mainLayoutmainLayout-addLayout(secondLayout); /把水平布局器secondLayout添加到mainLayoutmainLayout-addLayout(thirdLayout); /把水平布局器thirdLayout添加到mainLayoutmainLayout-addLayout(fourthLayout); /把水平布局器fourthLayout添加到mainLayoutconnect(zeroButton,SI
17、GNAL(clicked(),this,SLOT(zeroButtonPress();/把按鍵zeroButton的按下事件同zeroButtonPress()綁定到一起,以下操作類似connect(oneButton,SIGNAL(clicked(),this,SLOT(oneButtonPress();connect(twoButton,SIGNAL(clicked(),this,SLOT(twoButtonPress();connect(threeButton,SIGNAL(clicked(),this,SLOT(threeButtonPress();connect(fourButton
18、,SIGNAL(clicked(),this,SLOT(fourButtonPress();connect(fiveButton,SIGNAL(clicked(),this,SLOT(fiveButtonPress();connect(sixButton,SIGNAL(clicked(),this,SLOT(sixButtonPress();connect(sevenButton,SIGNAL(clicked(),this,SLOT(sevenButtonPress();connect(eightButton,SIGNAL(clicked(),this,SLOT(eightButtonPres
19、s();connect(nineButton,SIGNAL(clicked(),this,SLOT(nineButtonPress();connect(addButton,SIGNAL(clicked(),this,SLOT(addButtonPress();connect(subButton,SIGNAL(clicked(),this,SLOT(subButtonPress();connect(mulButton,SIGNAL(clicked(),this,SLOT(mulButtonPress();connect(divButton,SIGNAL(clicked(),this,SLOT(d
20、ivButtonPress();connect(equButton,SIGNAL(clicked(),this,SLOT(equButtonPress();connect(clearButton,SIGNAL(clicked(),this,SLOT(clearButtonPress();this-setWindowTitle(tr(Calculator);/設置窗體標題為Calculator input2= 0;/初始化運算操作數(shù)2為0 input1 = 0;/初始化運算操作數(shù)1為0 operate = 0;/初始化運算符為0然后是析構(gòu)函數(shù)的實現(xiàn):Calculator:Calculator()
21、/析構(gòu)函數(shù)主要完成對構(gòu)造函數(shù)中所聲明的QLineEdit、QPushButton、QHBoxLayout、QVBoxLayout類的對象的回收工作(可以不定義析構(gòu)函數(shù),程序運行結(jié)束時會自動調(diào)用系統(tǒng)默認的析構(gòu)函數(shù))if (operateEdit != NULL) / operateEdit = NULL;deleteoperateEdit; if (zeroButton != NULL) zeroButton = NULL;deletezeroButton;.根據(jù)前面對按鍵事件的分析,有數(shù)字輸入鍵,運算操作符輸入鍵和清屏鍵三種,故對每種事件的槽響應函數(shù)都只說明一種,其他依此類推。數(shù)字輸入鍵響應槽
22、函數(shù),以按鍵“1”為例:void Calculator:oneButtonPress()if(input2=0)/如果當前顯示框為0 input2=1;/變0為1 else/如果當前顯示框不為0 input2= operateEdit-text(); input2.append(tr(1);/在顯示的數(shù)據(jù)后面追加1 operateEdit-setText(input2);/更新顯示框中的顯示信息運算操作符輸入鍵響應槽函數(shù),以按鍵“+”為例:void Calculator:addButtonPress()floatfirst,second; input2= operateEdit-text();
23、/把當前顯示的數(shù)據(jù)保存到運算操作數(shù)2中if(operate = 0)/如果是第一次按下運算符鍵 input1 = input2;/把運算操作數(shù)2中的數(shù)據(jù)保存到運算操作數(shù)1中 input2= 0;/清除運算操作數(shù)2中的數(shù)據(jù) operate = +;/把運算符鍵置+ Else/如果是第二次按下運算符鍵 second=input2.toFloat();/把運算操作數(shù)2中的數(shù)據(jù)轉(zhuǎn)化為浮點類型 first=input1.toFloat();/把運算操作數(shù)1中的數(shù)據(jù)轉(zhuǎn)化為浮點類型switch(operate)/根據(jù)當前的運算符判斷做何操作 case+:first = first+second;break;
24、case-:first = first-second;break;case*:first = first*second;break;case/:first = first/second;break; input1 = QString:number(first,f,10);/把運算的結(jié)果轉(zhuǎn)化成為可以在顯示框顯示的類型 input2 = 0;/清除運算操作數(shù)2中的數(shù)據(jù) operate = +;/把運算符鍵置“+” operateEdit-setText(input1);/更新顯示框中的顯示內(nèi)容清屏操作響應函數(shù):void Calculator:clearButtonPress() input2=0;/把運算操作數(shù)2清零 input1=0;/把運算操作數(shù)1清零operateEdit-setText(input2); /更新顯示框中的顯示內(nèi)容3) 對main.cpp源代碼的簡要說明#include /包含應用程序類#include calculator.h/包含計算器類int main(intargc, char *argv)/main函數(shù)的標準寫法QApplication app(argc, argv); /創(chuàng)建一個QApplication對象,管理應用程序的資源 Calculator mainwindow; /產(chǎn)生一個計算器對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學《傳感與測試技術(shù)》2023-2024學年第一學期期末試卷
- 國有土地委托經(jīng)營管理合同
- 合同編504條與民法典61條
- 大班音樂課件P《春雨沙沙》
- 2024年六盤水客運從業(yè)資格證考試一點通
- 2024個人短期借款合同書
- 會議備忘錄范文6篇-20220308150300
- 2024中國工商銀行借貸合同范本
- 2024版家政服務合同樣本
- 2024個人小額貸款合同書范本
- 美食行業(yè)外賣平臺配送效率提升方案
- 中國民用航空局信息中心招聘筆試題庫2024
- 芯片設計基礎知識題庫100道及答案(完整版)
- 2025屆高考語文一輪復習:文言文概括和分析 課件
- 年產(chǎn)10萬套新能源車電池托盤項目可行性研究報告寫作模板-申批備案
- 《大學美育》 課件 4.模塊五 第二十四章 時空綜合的影視藝術(shù)之美
- 2022-2023學年廣東省廣州市天河區(qū)六年級(上)期末數(shù)學試卷(含答案)
- 2024年全國職業(yè)院校技能大賽高職組(智慧物流賽項)考試題庫(含答案)
- 2024年新人教版七年級上冊歷史 第11課 西漢建立和“文景之治”
- 北師大版(三起)(2024)三年級上冊英語Unit 1 Family單元測試卷(含答案)
- 2024水利云播五大員考試題庫及答案
評論
0/150
提交評論