電子科學與技術畢業(yè)論文一種基于qt的科學計算器系統(tǒng)_第1頁
已閱讀1頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  畢業(yè)設計報告(論文)</p><p>  題目:一種基于Qt的科學計算器系統(tǒng) </p><p> 所 屬 系電子工程系</p><p> 專 業(yè)電子科學與技術</p><p> 學 號01308150</p><p> 姓 名羊元東</p><p> 指導

2、教師滕衍萍</p><p> 起訖日期2013.2 --- 2013.5</p><p> 設計地點東南大學成賢學院</p><p>  東南大學成賢學院畢業(yè)設計報告(論文)</p><p><b>  誠 信 承 諾</b></p><p>  本人承諾所呈交的畢業(yè)設計報告(論文)及取得的成果是

3、在導師指導下完成,引用他人成果的部分均已列出參考文獻。如論文涉及任何知識產(chǎn)權糾紛,本人將承擔一切責任。</p><p>  學生簽名: </p><p><b>  日  期:</b></p><p>  一種基于Qt的科學計算器系統(tǒng)</p><p><b>  摘 要</b>&l

4、t;/p><p>  人類已經(jīng)進入信息化時代。信息技術發(fā)展日新月異,計算器已經(jīng)進入人們生活的各個領域,在現(xiàn)代生活中不可或缺,大型復雜的計算是人腦所不能勝任的,而且較易出錯。本文針對Qt科學計算器進行研究,增加了很多功能,給用戶帶來了很多方便,并且提高了用戶的運算效率。</p><p>  本文從項目背景、需求分析、軟件設計等方面詳細說明了Qt科學計算器的開發(fā)設計過程。軟件采用linux編寫代碼

5、,Qt 設計界面來開發(fā)。計算器包含簡單計算功能。</p><p>  計算器具有界面可視化,方便用戶操作等特點,并且該計算器的算式提取與存儲功能使得算式計算更加快捷方便,為用戶進行大量復雜科學計算提供了有效保證。</p><p>  關鍵詞:科學計算器;進制轉(zhuǎn)換;算式提??; Qt </p><p>  English title</p><p&g

6、t;<b>  Abstract</b></p><p>  Mankind has entered the information age. The rapid development of information technology, the calculator has entered all spheres of life of the people, an integral pa

7、rt of modern life, a large complex calculations the human brain is incapable of, and error-prone. For Qt scientific calculator, adding a lot of features, a lot of convenience to the user, and improve the operational effi

8、ciency of the user.</p><p>  From the project background, requirements analysis, software design and other aspects of a detailed description of the development of the design process of the Qt scientific calc

9、ulator. The software uses the Linux write code, Qt interface design to develop. The calculator contains a simple calculation functions.</p><p>  The calculator interface visualization, user-friendly operatio

10、n, and the calculator formula extraction and storage features make the formula quicker and more convenient for the user to carry out a large number of complex scientific calculations provide an effective guarantee.</p

11、><p>  Keyword: Scientific calculators; binary conversion; formula extract; Qt </p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII&

12、lt;/p><p><b>  第一章 緒論1</b></p><p>  1.1 項目背景1</p><p>  1.2 項目內(nèi)容和要求1</p><p>  1.2.1 題目介紹1</p><p>  1.2.2 題目要求1</p><p>  1.3 項目特點及

13、意義1</p><p>  第二章 需求分析3</p><p>  2.1 功能需求一3</p><p>  2.2 功能分析3</p><p>  2.3 安全性分析4</p><p>  2.4 可行性分析4</p><p>  2.5 系統(tǒng)設計工具4</p>&

14、lt;p>  2.5.1 fedora技術簡介4</p><p>  2.5.2 QSqlite數(shù)據(jù)庫技術4</p><p>  第三章 軟件設計6</p><p>  3.1 數(shù)據(jù)庫設計6</p><p>  3.1.1 實體屬性圖6</p><p>  3.1.2 關系模型設計6</p>

15、;<p>  3.1.3 數(shù)據(jù)庫結(jié)構設計7</p><p>  第四章 簡單的計算器8</p><p><b>  4.1項目目的8</b></p><p><b>  4.2項目內(nèi)容8</b></p><p><b>  4.3項目步驟8</b><

16、;/p><p>  第五章 計算器程序的實現(xiàn)11</p><p>  第六章 源代碼的分析說明14</p><p>  第七章 編譯運行20</p><p>  第八章 計算器程序的移植21</p><p><b>  致 謝23</b></p><p><b

17、>  參考文獻24</b></p><p><b>  第一章 緒論</b></p><p><b>  1.1 項目背景</b></p><p>  隨著計算機的飛速發(fā)展,人類已經(jīng)進入信息化時代。信息技術發(fā)展日新月異,計算已經(jīng)進入人們生活的各個領域,在現(xiàn)代生活中不可或缺,大型復雜的計算是人腦所不能勝任

18、的,而且較易出錯。以前的計算器只能進行簡單的加減乘除四則運算,而且只能進行單步運算,如果遇到較長的算式時就得讓用戶一步一步輸入,浪費很多時間,還會可能遺漏數(shù)據(jù)內(nèi)容,讓用戶得多次輸入算式驗證,如果一次錯誤就得驗證多遍,浪費時間效率低下。隨著科技的發(fā)展,人們所學習的內(nèi)容越來越多,需求越來越廣泛。</p><p>  本文設計的計算器擴大了用戶的運算領域。并且考慮到用戶有時常用一些算式,提高了用戶的效率,方便了用戶的操

19、作,本文設計中主要采用的技術為Qt ,Qt 為設計可視化界面,通過軟件的設計可以快速設計出自己需要的界面,然后再到編寫各個按鍵的槽函數(shù)與算法。上網(wǎng)查找資料,看書查找例子。</p><p>  1.2 項目內(nèi)容和要求</p><p>  1.2.1 題目介紹</p><p>  設計一個功能齊備的QT科學計算器,具有算式編輯計算和普通計算窗口。具體要求如下:可同時出現(xiàn)

20、二、八、十六、十等不同進制,并可實現(xiàn)大中小括號和各類不同函數(shù)及位運算。三角函數(shù)可設置度或弧度。設計實現(xiàn)文件處理窗口,可實現(xiàn)算式的添加、刪除、存儲和提取。</p><p>  普通計算窗口:支持二、八、十六、十等不同進制數(shù)據(jù)的直接輸入、計算和數(shù)制間的相互轉(zhuǎn)換,當輸入回車鍵或等號鍵時直接給出當前算式的運算結(jié)果,算式計算和編輯可同時交叉進行,設置中間變量,方便運算過程中中間數(shù)據(jù)的存儲或提取插入。</p>

21、<p>  1.2.2 題目要求</p><p>  (1)實現(xiàn)二進制、八進制、十進制、十六進制之間的轉(zhuǎn)換;</p><p> ?。?)實現(xiàn)對算式的編輯、存儲、粘貼、修改、計算;</p><p> ?。?)算式長度可達256個字符;</p><p> ?。?)實現(xiàn)普通計算和科學計算;</p><p> ?。?

22、)實現(xiàn)大中小括號和各類不同函數(shù)及位運算;</p><p> ?。?)支持二、八、十六、十等不同進制數(shù)據(jù)的直接輸入、計算和數(shù)制間的相互轉(zhuǎn)換;</p><p> ?。?)實現(xiàn)對各個按鍵的幫助功能;</p><p> ?。?)顯示當前日期時間功能;</p><p>  采用高級程序設計語言,編碼規(guī)范清晰,關鍵算法或處理須加注釋說明。</p&g

23、t;<p>  1.3 項目特點及意義</p><p>  本文對計算器進行設計,比傳統(tǒng)計算其增加了許多功能,使用更方便,主要有以下幾個特點:</p><p> ?。?)計算速度快,節(jié)省時間、人力</p><p> ?。?)普通窗口可以進行各進制的加減乘除運算。</p><p> ?。?)科學計算窗口可以進行小括號、中括號、大括

24、號,正弦、余弦,角度,弧度,包括普通窗口的運算。</p><p> ?。?)可對算式進行存儲,添加,刪除等功能。 </p><p>  (5)有幫助功能,可以通過查詢查詢個按鍵的功能,可以對按鍵功能添加、刪除。 </p><p> ?。?)提供良好的人機交互界面,操作簡單快捷。</p><p>  QT科學計算器比傳統(tǒng)計算器多了很多功能,可以

25、進行普通窗口計算,也可以進行科學窗口計算。普通窗口計算時可以進行各種進制的四則運算,還可以把數(shù)字通過進制轉(zhuǎn)換,得到需要的數(shù)據(jù)??茖W窗口計算時可以把整個算式輸入進行計算,這樣避免因輸入的數(shù)據(jù)過多而得多次驗證,只需確保輸入的算式正確就可以得到正確的結(jié)果。可以把常用的算式保存起來,這樣下次再用時用戶可以直接提取算式,避免了因再次輸入算式而浪費時間,提到了效率??茖W計算式還可以進行,正弦、余弦、角度、弧度、開方、平方、或與非等運算,并且增加了括

26、號符號,使得算式具有優(yōu)先級。提高運算效率。并增加了幫助功能,使得用戶及時查詢幫助功能,快速學會使用操作。</p><p><b>  第二章 需求分析</b></p><p><b>  2.1 功能需求一</b></p><p>  在程序設計中,通過設計、編制、調(diào)試一個模擬計算器的程序,加深對語法及語義分析原理的理解,

27、并實現(xiàn)對命令語句的靈活應用。在程序設計中,可以用兩種方法解決問題:一是傳統(tǒng)的結(jié)構化程序設計方法,二是更先進的面向?qū)ο蟪绦蛟O計方法。而在面向?qū)ο蟪绦蛟O計中關鍵是如何將問題域中的實體(即日常所見的概念)抽取出來,作為C++程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應考慮類必須滿足的約束。</p><p>  我們?nèi)粘I畹拈_支,大額數(shù)字或是多倍小數(shù)的計算都需要計算器的幫助,處理數(shù)字的開方、正余弦

28、都離不開計算器。雖然現(xiàn)在的計算器價格比較低廉,但是功能過于簡單的不能滿足個人需求,功能多的價格較貴,操作不便不說,很多功能根本用不到。所以,我們想到可不可以用自己的所學為自己設計開發(fā)一個屬于自己的簡單計算器來完成日常生活的需求。</p><p>  計算器是日常生活中十分便捷有效的工具,能實現(xiàn)加、減、乘、除、開方、求倒數(shù)等簡單運算的工具。要實現(xiàn)計算功能,可以用C++和Qt的知識編寫程序來解決此問題。該計算器大大的

29、降低了數(shù)字計算的難度及提高了計算的準確度和精確度。該計算器使用非常簡單和方便,對廣大中小學生的學習有巨大幫助作用,也對在職人員的工作有點幫助作用。本文的程序設計設計工作環(huán)境為Linux +QT Creator ,在程序設計中,采用了結(jié)構化與面向?qū)ο髢煞N解決問題的方法。</p><p><b>  2.2 功能分析</b></p><p>  1).普通窗口計算設計&l

30、t;/p><p>  這一模塊要求進行加減乘除運算。</p><p>  支持二、八、十六、十等不同進制數(shù)據(jù)的直接輸入、計算和數(shù)制間的相互轉(zhuǎn)換,當輸入回車鍵或等號鍵時直接給出當前算式的運算結(jié)果,算式計算和編輯可同時交叉進行,設置中間變量,方便運算過程中中間數(shù)據(jù)的存儲或提取插入。</p><p>  2).科學算式窗口計算設計</p><p>  

31、(1)可以對算式進行編輯、存儲、粘貼、修改、計算。</p><p> ?。?)算式長度可達256個字符。</p><p>  (3)算式內(nèi)可同時出現(xiàn)二、八、十六、十等不同進制,并可實現(xiàn)大中小括號和各類不同函數(shù)及位運算。</p><p> ?。?)三角函數(shù)可設置度或弧度。</p><p>  (5)設計實現(xiàn)文件處理窗口,可實現(xiàn)算式的添加、刪除、

32、存儲和提取。</p><p>  3).幫助功能實現(xiàn)設計</p><p> ?。?)通過幫助鍵可以查找各鍵的功能。</p><p> ?。?)可以對幫助里的功能添加刪除。</p><p><b>  4).時間功能設計</b></p><p>  可以顯示當前時間,并且隨著電腦時間的改變而改變。&

33、lt;/p><p><b>  5).算式編輯</b></p><p>  (1)可以對輸入的算式保存。</p><p>  (2)可以添加算式。</p><p>  (3)可以刪除算式。</p><p><b>  2.3 安全性分析</b></p><p&

34、gt;  使用Qt自帶的QSqlite數(shù)據(jù)庫,進行存儲算式,對算式進行添加、保存、刪除功能,并且在幫助功能上也使用此數(shù)據(jù)庫,把各個按鍵的功能村如此數(shù)據(jù)庫中。還可以添加和刪除,非常方便。</p><p>  并且此程序界面使用Qt designer進行布局,這樣對各個控件進行布局,排版結(jié)構時不容易出錯,快速便捷。提高軟件的安全性。</p><p><b>  2.4 可行性分析&l

35、t;/b></p><p>  計算器是日常生活中非常便捷有效的工具,它具有普通計算和科學計算,能實現(xiàn)加減乘除等普通功能,還可以實現(xiàn)算是運算,并且可以進行進制裝換,不再局限于十進制,他大大的提高了我們的效率,節(jié)省了時間,可促進科技的發(fā)展,還可以用來存儲算式,可以方便下次使用,采用Qt編寫,Qt designer設計的界面美觀,還可以用拖拽功能進行設計控件的位置、大小、屬性、結(jié)構等功能,這樣在編寫代碼時就不用

36、浪費時間對控件進行聲明等代碼了。這降低了程序員的難度,提高了程序員的效率,并且上手快,具有一定的可行性。</p><p>  技術經(jīng)濟分析是研究技術領域的經(jīng)濟問題和經(jīng)濟規(guī)律的科學,是研究一定技術條件下如何提高經(jīng)濟效果的科學,是技術與經(jīng)濟的交叉。</p><p>  在技術上,主要是采用linux,可以進行復雜的數(shù)據(jù)庫操作,進行算是的增、刪、改、查等功能。用Qt編寫,有些類似C++,但大多數(shù)

37、都是Qt封裝好的函數(shù)。</p><p>  在linux中安裝Qt軟件,配置環(huán)境變量,并安裝Qt插件。從而用Qt 進行制作界面,做出的效果既美觀又快捷方便。</p><p>  使用Qt具有良好美觀的界面,必要的信息存儲和和較好的健壯性,使用人員能夠快捷簡單的進行操作,可以快捷的獲得計算結(jié)果,給人們帶來方便,對人們的生活有很大的幫助。</p><p>  2.5 系

38、統(tǒng)設計工具</p><p>  2.5.1 fedora技術簡介</p><p>  Fedora (第七版以前為Fedora Core)是一款基于 Linux 的操作系統(tǒng),也是一組維持計算機正常運行的軟件集合。Fedora 由Fedora Project社區(qū)開發(fā)、紅帽公司贊助,目標是創(chuàng)建一套新穎、多功能并且自由和開源的操作系統(tǒng)。Fedora 項目以社區(qū)的方式工作,引領創(chuàng)新并傳播自由代碼和

39、內(nèi)容,是世界各地愛好、使用和構建自由軟件的社區(qū)朋友的代名詞。</p><p>  Fedora基于Red Hat Linux,在Red Hat Linux終止發(fā)行后,紅帽公司計劃以Fedora來取代Red Hat Linux在個人領域的應用,而另外發(fā)行的Red Hat Enterprise Linux(Red Hat企業(yè)版Linux,RHEL)則取代Red Hat Linux在商業(yè)應用的領域。</p>

40、<p>  Fedora的功能對于用戶而言,它是一套功能完備、更新快速的免費操作系統(tǒng),而對贊助者Red Hat公司而言,它是許多新技術的測試平臺,被認為可用的技術最終會加入到Red Hat Enterprise Linux中。</p><p>  2.5.2 QSqlite數(shù)據(jù)庫技術</p><p>  SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關聯(lián)式數(shù)據(jù)庫管理系統(tǒng),

41、它的設計目標是嵌入式的(1)Qt designer技術介紹</p><p>  簡單的來說QT Designer是一個GUI的工具。這個工具可以幫助我們來加快寫QT 程序的速度.利用QT Designer可以用一種所見既所得的方式,來產(chǎn)生QT程序的GUI介面的程式碼.通過增加一些功能,就可以完成一個程序了.利用QT Designer可以非??焖俚膶W會QT,而我們這里說利用QT Designer來學習QT而不是利用

42、QT Designer來寫QT,這里的區(qū)別就在于QT Designer所產(chǎn)生的程序代碼有些繁瑣,運行起來也比較的慢些,我們這里只是利用QT Designer來幫助我們學習,而不是直接去運行QT Designer生成的程序,在這里Qt designer與vs2008連接在一起,安裝qt-win-opensource-4.7.3-vs2008.exe,在安裝vs的qt插件qt-vs-addin-1.1.9.exe,在配置環(huán)境變量:QT =

43、your Qt-root-folder;在 PATH中添加: “;%QT%\bin”。然后就可以用Qt designer中的控件進行制作程序界面,并且可以直接修改屬性,這樣可以在代碼量上節(jié)省不少時間。</p><p><b> ?。?)Qt技術介紹</b></p><p>  QT 是一個跨平臺的 C++ GUI 應用構架,它提供了豐富的窗口部件集,具有面向?qū)ο蟆⒁子?/p>

44、擴展、真正的組件編程等特點,更為引人注目的是目前 Linux 上最為流行的 KDE 桌面環(huán)境就是建立在 QT 庫的基礎之上。支持 Linux 平臺。伴隨著 KDE 的快速發(fā)展和普及,QT 很可能成為 Linux 窗口平臺上進行軟件開發(fā)時的 GUI 首選。</p><p>  信號和槽機制是 QT 的核心機制,要精通 QT 編程就必須對信號和槽有所了解。信號和槽是一種高級接口,應用于對象之間的通信,它是 QT 的核

45、心特性,也是 QT 區(qū)別于其它工具包的重要地方。信號和槽是 QT 自行定義的一種通信機制,它獨立于標準的 C/C++ 語言,因此要正確的處理信號和槽,必須借助一個稱為 moc(Meta Object Compiler)的 QT 工具,該工具是一個 C++ 預處理程序,它為高層次的事件處理自動生成所需要的附加代碼。</p><p>  在我們所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一個回調(diào)

46、函數(shù)用于響應它們能觸發(fā)的每個動作,這個回調(diào)函數(shù)通常是一個指向某個函數(shù)的指針。但是,在 QT 中信號和槽取代了這些凌亂的函數(shù)指針,使得我們編寫這些通信程序更為簡潔明了。 信號和槽能攜帶任意數(shù)量和任意類型的參數(shù),他們是類型完全安全的,不會像回調(diào)函數(shù)那樣產(chǎn)生 core dumps。在這里我設計的主窗口為:QWidget,而在幫助窗口為:QDialog。</p><p><b>  第三章 軟件設計</b

47、></p><p><b>  3.1 數(shù)據(jù)庫設計</b></p><p>  數(shù)據(jù)庫在一個管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構設計的好壞將直接對應用系統(tǒng)的效率以及實現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構設計可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)庫的完整性和一致性。同時,合理的數(shù)據(jù)庫結(jié)構也將有利于程序的實現(xiàn)。</p><p>  3.1.1 實

48、體屬性圖</p><p>  E-R圖是實體之間聯(lián)系的一個簡單表述,下面詳細介紹各實體的屬性:</p><p>  圖3.1算式實體屬性圖</p><p>  算式實體屬性如圖3.1,包括算式id,算式名字。</p><p>  圖3.2按鍵信息實體屬性圖</p><p>  按鍵信息實體屬性如圖3.2,包括按鍵編號,

49、按鍵名,按鍵功能。</p><p>  3.1.2 關系模型設計</p><p>  本系統(tǒng)中主要的關系模型設計如下:</p><p>  算式信息(編號,算式名);</p><p>  按鍵信息(編號,按鍵名,按鍵功能);</p><p>  3.1.3 數(shù)據(jù)庫結(jié)構設計</p><p>  每

50、個數(shù)據(jù)文件均有一張定義表。其數(shù)據(jù)庫各表的表頭信息更為詳細的反映數(shù)據(jù)間的關系。本系統(tǒng)數(shù)據(jù)庫的內(nèi)容包括算式表、幫主功能表。</p><p>  表的具體設計如下所示:</p><p>  (1)算式表用來存儲算是編號和算式名,表名:message。本表用來存儲已用戶常用的算式,其中可以對算式進行保存、刪除、修改,方便用戶及使用到常用的式子,提高用戶效率。算式表如表3.1所示。</p>

51、;<p><b>  表3.1算式表</b></p><p>  (2)按鍵信息表用來存儲按鍵編號,按鍵名,按鍵功能,表名:helpmessage。本表用來實現(xiàn)幫助功能,存儲幫助功能中按鍵的信息,可以查看所有的按鍵功能,也可以看單個按鍵信息,還可以對案件信息進行增加和刪除。按鍵表如表3.2所示。</p><p><b>  表3.2按鍵表<

52、;/b></p><p>  第四章 簡單的計算器</p><p><b>  4.1項目目的</b></p><p> ?。?)熟悉QtCreator的簡單操作。</p><p>  (2)了解Qt程序編寫框架。</p><p> ?。?)了解信號和槽機制,熟練掌握信號與槽在應用程序中的使

53、用。</p><p><b>  4.2項目內(nèi)容</b></p><p> ?。?)查看API手冊,學習簡單的Qt類的使用,如QLineEdit、QPushButton等。</p><p> ?。?)用QtCreator創(chuàng)建工程,用Qt編寫計算器程序。</p><p> ?。?)對計算器程序進行移植。</p>

54、<p><b>  4.3項目步驟</b></p><p><b>  創(chuàng)建工程</b></p><p>  1)打開QtCreator,如圖F-1所示。</p><p><b>  圖F-1</b></p><p>  2)選擇File->New File

55、 or Project,然后在彈出的對話框中選擇Other Project->Empty Qt project(如圖F-2所示),然后進入下一步。</p><p><b>  圖2</b></p><p>  3)定義新工程的工程名并選擇保存路徑(如圖F-3所示),然后進入下一步。</p><p><b>  圖3</b&

56、gt;</p><p>  4)選擇Qt版本,這里選擇使用Qt4.7.1,取消對Qt in PATH的選擇(如圖4所示),然后進入下一步,完成新工程的創(chuàng)建(如圖F-5所示)。</p><p><b>  圖F-4</b></p><p><b>  圖F-5</b></p><p>  第五章 計算

57、器程序的實現(xiàn)</p><p>  主要工作:一是實現(xiàn)計算器的圖形界面;二是實現(xiàn)按鍵事件和該事件對應的功能綁定,即信號和對應處理槽函數(shù)的綁定。</p><p><b>  圖形界面的實現(xiàn)</b></p><p>  通過分析可知,需要16個按鍵和一個顯示框,同時考慮到整體的排布,還需要水平布局器和垂直布局器。通過組織這些類我們可以實現(xiàn)一個簡單的帶

58、有數(shù)字0~9,可以進行簡單四則運算且具有清屏功能的計算器。對于這些類的具體操作會在后面的代碼中詳細說明。</p><p>  5.1信號和對應槽函數(shù)的綁定</p><p>  分析計算器的按鍵我們可以把按鍵事件分為以下三類,一是簡單的數(shù)字按鍵,</p><p>  主要進行數(shù)字的錄入,這類按鍵包括按鍵0~9;二是運算操作鍵,用于輸入數(shù)學運算符號,進行數(shù)學運算和結(jié)果的

59、顯示,這類按鍵包括“+”,“-”,“*”,“/”,“=”;三是清屏操作鍵,用于顯示框顯示信息的清除。</p><p>  5.2進入剛才創(chuàng)建的空工程,雙擊左側(cè)的Calculator.pro,在主編輯框中目前顯示Calculator.pro的內(nèi)容為空,如圖F-6所示。這是因為目前什么文件都沒有添加的緣故。</p><p><b>  圖6</b></p>

60、<p>  5.3添加文件calculator.h</p><p>  在工程Calculator上面點擊右鍵,然后點擊Add New,選擇添加C++ Header File(如圖F-7所示),進入下一步后輸入文件名calculator.h(如圖F-8所示),然后完成文件的添加。</p><p><b>  圖7</b></p><p&g

61、t;<b>  圖F-8</b></p><p>  5.4添加文件calculator.cpp和main.cpp</p><p>  與添加文件calculator.h的過程類似,只是在選擇文件類型時選擇為C++ Source File。完成后可以查看Calculator.pro文件的內(nèi)容,整個工程的文件結(jié)構如圖F-9所示。</p><p>

62、<b>  圖F-9</b></p><p>  第六章 源代碼的分析說明</p><p>  6.1對calculator.h源代碼的簡要說明</p><p>  #ifndef CALCULATOR_H</p><p>  #define CALCULATOR_H //對calculator.h頭文件的聲明<

63、/p><p>  #include<QWidget>//包含主窗體類</p><p>  #include<QPushButton>//包含按鍵類</p><p>  #include<QVBoxLayout>//包含垂直布局器類</p><p>  #include<QHBoxLayout>//包

64、含水平布局器類</p><p>  #include<QLineEdit>//包含顯示框類</p><p>  class Calculator : publicQWidget//計算器繼承自主窗體類</p><p><b>  {</b></p><p>  Q_OBJECT //必須加上這句,如果要調(diào)

65、用信號,槽函數(shù)的操作的話</p><p><b>  public:</b></p><p>  Calculator(); //計算器類的構造函數(shù)</p><p>  ~Calculator(); //計算器類的析構函數(shù)</p><p>  public slots: //定義各個按鍵按下后對應操作處理的槽函數(shù)

66、</p><p>  voidzeroButtonPress();</p><p>  voidoneButtonPress();</p><p>  voidtwoButtonPress();</p><p>  voidthreeButtonPress();</p><p>  voidfourButtonPres

67、s();</p><p>  voidfiveButtonPress();</p><p>  voidsixButtonPress();</p><p>  voidsevenButtonPress();</p><p>  voideightButtonPress();</p><p>  voidnineButt

68、onPress();</p><p>  voidaddButtonPress();</p><p>  voidsubButtonPress();</p><p>  voidmulButtonPress();</p><p>  voiddivButtonPress();</p><p>  voidclearBu

69、ttonPress();</p><p>  voidequButtonPress();</p><p><b>  private:</b></p><p>  QLineEdit *operateEdit;//聲明顯示框</p><p>  QPushButton *zeroButton;//聲明數(shù)字按鍵¹

70、</p><p>  QPushButton *oneButton;</p><p>  QPushButton *twoButton;</p><p>  QPushButton *threeButton;</p><p>  QPushButton *fourButton;</p><p>  QPushButto

71、n *fiveButton;</p><p>  QPushButton *sixButton;</p><p>  QPushButton *sevenButton;</p><p>  QPushButton *eightButton;</p><p>  QPushButton *nineButton;</p><p

72、>  QPushButton *clearButton;//聲明運算符按鍵</p><p>  QPushButton *addButton;</p><p>  QPushButton *subButton;</p><p>  QPushButton *divButton;</p><p>  QPushButton *mulBut

73、ton;</p><p>  QPushButton *equButton;</p><p>  QHBoxLayout *firstLayout;//聲明水平布局器,該布局器主要對16個按鍵進行布局</p><p>  QHBoxLayout *secondLayout;</p><p>  QHBoxLayout *thirdLayout

74、;</p><p>  QHBoxLayout *fourthLayout;</p><p>  QVBoxLayout *mainLayout;//聲明垂直布局器,該布局器主要對主窗體上面的空間進行排布</p><p>  QString input1;//計算器第一個運算操作數(shù)</p><p>  QString input2;//計算器

75、第二個運算操作數(shù)</p><p>  char operate;//運算符</p><p><b>  };</b></p><p>  #endif// CALCULATOR_H</p><p>  對calculator.cpp源代碼的簡要說明</p><p>  首先是構造函數(shù)的實現(xiàn):<

76、;/p><p>  Calculator::Calculator()</p><p><b>  {</b></p><p>  operateEdit = newQLineEdit(this);//初始化顯示框</p><p>  operateEdit->setReadOnly(true); //設置顯示框為只讀&

77、lt;/p><p>  operateEdit->setText(tr("0"));//初始化顯示框顯示數(shù)據(jù)為0</p><p>  zeroButton = newQPushButton;//初始化按鍵</p><p>  zeroButton->setText(tr("0"));//設置按鍵上顯示的標簽,以下對按鍵

78、相關的操作類似</p><p>  oneButton = newQPushButton;</p><p>  oneButton->setText(tr("1"));</p><p>  twoButton = newQPushButton;</p><p>  twoButton->setText(tr(&

79、quot;2"));</p><p>  threeButton = newQPushButton;</p><p>  threeButton->setText(tr("3"));</p><p>  fourButton = newQPushButton;</p><p>  fourButton-&g

80、t;setText(tr("4"));</p><p>  fiveButton = newQPushButton;</p><p>  fiveButton->setText(tr("5"));</p><p>  sixButton = newQPushButton;</p><p>  si

81、xButton->setText(tr("6"));</p><p>  sevenButton = newQPushButton;</p><p>  sevenButton->setText(tr("7"));</p><p>  eightButton = newQPushButton;</p>

82、<p>  eightButton->setText(tr("8"));</p><p>  nineButton = newQPushButton;</p><p>  nineButton->setText(tr("9"));</p><p>  clearButton = newQPushButt

83、on;</p><p>  clearButton->setText(tr("Clear"));</p><p>  addButton = newQPushButton;</p><p>  addButton->setText(tr("+"));</p><p>  subButton

84、= newQPushButton;</p><p>  subButton->setText(tr("-"));</p><p>  mulButton = newQPushButton;</p><p>  mulButton->setText(tr("*"));</p><p>  di

85、vButton = newQPushButton;</p><p>  divButton->setText(tr("/"));</p><p>  equButton = newQPushButton;</p><p>  equButton->setText(tr("="));</p><p

86、>  firstLayout = newQHBoxLayout;//初始化水平布局器firstLayout</p><p>  firstLayout->addWidget(zeroButton); //把按鍵zeroButton添加到firstLayout</p><p>  firstLayout->addWidget(oneButton); //把按鍵oneButt

87、on添加到firstLayout</p><p>  firstLayout->addWidget(twoButton); //把按鍵twoButton添加到firstLayout</p><p>  firstLayout->addWidget(addButton); //把按鍵threeButton添加到firstLayout,以下對水平布局器的操作類似</p>

88、<p>  secondLayout = newQHBoxLayout;</p><p>  secondLayout->addWidget(threeButton);</p><p>  secondLayout->addWidget(fourButton);</p><p>  secondLayout->addWidget(fi

89、veButton);</p><p>  secondLayout->addWidget(subButton);</p><p>  thirdLayout = newQHBoxLayout;</p><p>  thirdLayout->addWidget(sixButton);</p><p>  thirdLayout-&g

90、t;addWidget(sevenButton);</p><p>  thirdLayout->addWidget(eightButton);</p><p>  thirdLayout->addWidget(mulButton);</p><p>  fourthLayout = newQHBoxLayout;</p><p>

91、;  fourthLayout->addWidget(nineButton);</p><p>  fourthLayout->addWidget(clearButton);</p><p>  fourthLayout->addWidget(equButton);</p><p>  fourthLayout->addWidget(divB

92、utton);</p><p>  mainLayout = newQVBoxLayout(this);//初始化垂直布局器mainLayout</p><p>  mainLayout->addWidget(operateEdit); //把顯示數(shù)據(jù)框operateEdit加到mainLayout</p><p>  mainLayout->addLa

93、yout(firstLayout); //把水平布局器firstLayout添加到mainLayout</p><p>  mainLayout->addLayout(secondLayout); //把水平布局器secondLayout添加到mainLayout</p><p>  mainLayout->addLayout(thirdLayout); //把水平布局器thi

94、rdLayout添加到mainLayout</p><p>  mainLayout->addLayout(fourthLayout); //把水平布局器fourthLayout添加到mainLayout</p><p>  connect(zeroButton,SIGNAL(clicked()),this,SLOT(zeroButtonPress()));</p>&

95、lt;p>  //把按鍵zeroButton的按下事件同zeroButtonPress()綁定到一起,以下操作類似</p><p>  connect(oneButton,SIGNAL(clicked()),this,SLOT(oneButtonPress()));</p><p>  connect(twoButton,SIGNAL(clicked()),this,SLOT(two

96、ButtonPress()));</p><p>  connect(threeButton,SIGNAL(clicked()),this,SLOT(threeButtonPress()));</p><p>  connect(fourButton,SIGNAL(clicked()),this,SLOT(fourButtonPress()));</p><p> 

97、 connect(fiveButton,SIGNAL(clicked()),this,SLOT(fiveButtonPress()));</p><p>  connect(sixButton,SIGNAL(clicked()),this,SLOT(sixButtonPress()));</p><p>  connect(sevenButton,SIGNAL(clicked()),thi

98、s,SLOT(sevenButtonPress()));</p><p>  connect(eightButton,SIGNAL(clicked()),this,SLOT(eightButtonPress()));</p><p>  connect(nineButton,SIGNAL(clicked()),this,SLOT(nineButtonPress()));</p>

99、<p>  connect(addButton,SIGNAL(clicked()),this,SLOT(addButtonPress()));</p><p>  connect(subButton,SIGNAL(clicked()),this,SLOT(subButtonPress()));</p><p>  connect(mulButton,SIGNAL(clicke

100、d()),this,SLOT(mulButtonPress()));</p><p>  connect(divButton,SIGNAL(clicked()),this,SLOT(divButtonPress()));</p><p>  connect(equButton,SIGNAL(clicked()),this,SLOT(equButtonPress()));</p>

101、<p>  connect(clearButton,SIGNAL(clicked()),this,SLOT(clearButtonPress()));</p><p>  this->setWindowTitle(tr("Calculator"));//設置窗體標題為Calculator</p><p>  input2= "0"

102、;//初始化運算操作數(shù)2為0</p><p>  input1 = "0";//初始化運算操作數(shù)1為0</p><p>  operate = '0';//初始化運算符為’0’</p><p><b>  }</b></p><p>  然后是析構函數(shù)的實現(xiàn):</p>&

103、lt;p>  Calculator::~Calculator()//析構函數(shù)主要完成對構造函數(shù)中所聲明的QLineEdit、QPushButton、QHBoxLayout、QVBoxLayout類的對象的回收工作(可以不定義析構函數(shù),程序運行結(jié)束時會自動調(diào)用系統(tǒng)默認的析構函數(shù))</p><p><b>  {</b></p><p>  if (operateE

104、dit != NULL) //</p><p><b>  {</b></p><p>  operateEdit = NULL;</p><p>  deleteoperateEdit;</p><p><b>  }</b></p><p>  if (zeroButto

105、n != NULL)</p><p><b>  {</b></p><p>  zeroButton = NULL;</p><p>  deletezeroButton;</p><p><b>  }</b></p><p><b>  ......</

106、b></p><p><b>  }</b></p><p>  根據(jù)前面對按鍵事件的分析,有數(shù)字輸入鍵,運算操作符輸入鍵和清屏鍵三種,故對每種事件的槽響應函數(shù)都只說明一種,其他依此類推。</p><p>  數(shù)字輸入鍵響應槽函數(shù),以按鍵“1”為例:</p><p>  void Calculator::oneBu

107、ttonPress()</p><p><b>  {</b></p><p>  if(input2=="0")//如果當前顯示框為0</p><p><b>  {</b></p><p>  input2="1";//變0為1</p>&l

108、t;p><b>  }</b></p><p>  else//如果當前顯示框不為0</p><p><b>  {</b></p><p>  input2= operateEdit->text();</p><p>  input2.append(tr("1"))

109、;//在顯示的數(shù)據(jù)后面追加1</p><p><b>  }</b></p><p>  operateEdit->setText(input2);//更新顯示框中的顯示信息</p><p><b>  }</b></p><p>  運算操作符輸入鍵響應槽函數(shù),以按鍵“+”為例:</p

110、><p>  void Calculator::addButtonPress()</p><p><b>  {</b></p><p>  floatfirst,second;</p><p>  input2= operateEdit->text();//把當前顯示的數(shù)據(jù)保存到運算操作數(shù)2中</p>

111、<p>  if(operate == '0')//如果是第一次按下運算符鍵</p><p><b>  {</b></p><p>  input1 = input2;//把運算操作數(shù)2中的數(shù)據(jù)保存到運算操作數(shù)1中</p><p>  input2= "0";//清除運算操作數(shù)2中的數(shù)據(jù)</

112、p><p>  operate = '+';//把運算符鍵置’+’</p><p><b>  }</b></p><p>  Else//如果是第二次按下運算符鍵</p><p><b>  {</b></p><p>  second=input2.toFlo

113、at();//把運算操作數(shù)2中的數(shù)據(jù)轉(zhuǎn)化為浮點類型</p><p>  first=input1.toFloat();//把運算操作數(shù)1中的數(shù)據(jù)轉(zhuǎn)化為浮點類型</p><p>  switch(operate)//根據(jù)當前的運算符判斷做何操作</p><p><b>  {</b></p><p>  case'

114、+':first = first+second;break;</p><p>  case'-':first = first-second;break;</p><p>  case'*':first = first*second;break;</p><p>  case'/':first = first/s

115、econd;break;</p><p><b>  }</b></p><p>  input1 = QString::number(first,'f',10);//把運算的結(jié)果轉(zhuǎn)化成為可以在顯示框顯示的類型</p><p>  input2 = "0";//清除運算操作數(shù)2中的數(shù)據(jù)</p>

116、<p>  operate = '+';//把運算符鍵置“+”</p><p><b>  }</b></p><p>  operateEdit->setText(input1);//更新顯示框中的顯示內(nèi)容</p><p><b>  }</b></p><p>&

117、lt;b>  清屏操作響應函數(shù):</b></p><p>  void Calculator::clearButtonPress()</p><p><b>  {</b></p><p>  input2="0";//把運算操作數(shù)2清零</p><p>  input1="

118、;0";//把運算操作數(shù)1清零</p><p>  operateEdit->setText(input2); //更新顯示框中的顯示內(nèi)容</p><p><b>  }</b></p><p>  對main.cpp源代碼的簡要說明</p><p>  #include <QApplication

119、>//包含應用程序類</p><p>  #include "calculator.h"//包含計算器類</p><p>  int main(intargc, char *argv[])//main函數(shù)的標準寫法</p><p><b>  {</b></p><p>  QApplicati

120、on app(argc, argv); //創(chuàng)建一個QApplication對象,管理應用程序的資源</p><p>  Calculator mainwindow; //產(chǎn)生一個計算器對象</p><p>  mainwindow.showMaximized();//顯示計算器窗體(默認以最大化的形式顯示)</p><p>  return app.exec();

121、//讓程序進入消息循環(huán),等待可能的菜單、工具條、鼠標等的輸入,進行響應。</p><p><b>  }</b></p><p><b>  第七章 編譯運行</b></p><p>  7.1完成源程序的編輯后,可以直接點擊圖F-10中所示的運行按鈕,這時QtCreator會自動編譯源程序并生成可執(zhí)行程序。</p&

122、gt;<p><b>  圖F-10</b></p><p>  7.2計算器程序在界面如圖F-11所示。</p><p><b>  圖F-11</b></p><p>  第八章 計算器程序的移植</p><p>  上面所說的可執(zhí)行程序是由QtCreator調(diào)用qmake命令生成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論