Qt 計算器的實現

2021-09-26 05:55:38 字數 3157 閱讀 3688

介面的**實現

#include 「widget.h」

#include

#include

#include

w->show();

w->setfixedsize(w->width(), w->height());

ret = a.exec();

delete w;

return ret;

}

執行的結果如圖所示

qt–計算器的實現

上面只是暫時生成了計算機demo的ui,會存在許多的問題以及演算法的實現按會在接下來進行介紹

a.計算器介面的**重構

1.重構–以改善**質量為目的**重寫,使其軟體設計的設計和架構更加合理,提高軟體的擴充套件性和維護性

**的實現與重構不同

**實現–按照設計程式設計實現,重心在於功能的實現

**重構–以提高**質量為目的軟體架構優化

區別:**實現是不考慮架構的好壞,只考慮功能的實現,**重構時不能影響已實現的功能,只考慮架構的改善

計算器介面**重構

qt–計算器的實現

重構的實現

calculatorui.h

#ifndef widget_h

#define widget_h

#include

#include

#include

class qcalculatorui : public qwidget

;#endif // widget_h

calculatorui.cpp

#include 「calculatorui.h」

qcalculatorui::qcalculatorui() : qwidget(null, qt::windowclosebuttonhint)

;

m_edit = new qlineedit(this);

if( m_edit != null )

else

for(int i=0; (i<4) && ret; i++)

else

}}return ret;

qcalculatorui* qcalculatorui::newinstance()

return ret;void qcalculatorui::show()

**實現的結果

qt–計算器的實現

b.在這裡要對qt的訊息處理做介紹,對之後計算器的操作會有幫助

1.qt訊息模型

qt封裝了具體作業系統的訊息機制

qt遵循經典的gui訊息驅動事件模型

qt–計算器的實現

c.qt定義了與系統訊息相關的概念

a.訊號–由作業系統產生的訊息

b.槽–程式中的訊息處理函式

c.連線–將系統訊息繫結到訊息處理函式

qt的訊息處理機制

qt–計算器的實現

qt–計算器的實現

上圖從qt幫助文件中對connect進行查詢,connect函式包含了傳送物件、訊息名、接收物件、接收物件的的成員函式

d.自定義槽

1.只有qobject的子類才能自定義槽

2.定義槽的類必須在宣告的最開始處使用q_object

3.類中宣告槽時需要使用slots關鍵字

4.槽與所處理的訊號在函式簽名上必須一致

5.signal和slot所指定的名稱中可以包含引數型別,不能包含具體引數名

//在上面的calculator.h上新增槽函式

private slots:

void onbuttonclicked();

//同時在cpp上將其實現,通過connect函式將其相連

void qcalculatorui::onbuttonclicked()

{qpushbutton* btn = (qpushbutton*)sender();

qdebug() << "onbuttonclicked()";

qdebug() << btn->text();

connect(m_buttons[i*5 + j], signal(clicked(bool)), this, slot(onbuttonclicked()));

按鈕按下實現的列印結果

qt–計算器的實現

e.計算器演算法的實現

1.字首表示式、中綴表示式、字尾表示式的區別

a.字首表示式–字首表示式是一種沒有括號的算術表示式,與中綴表示式不同的是,其將運算子寫在前面,運算元寫在後面。為紀念其發明者波蘭數學家jan lukasiewicz,字首表示式也稱為「波蘭式」。例如,- 1 + 2 3,它等價於1-(2+3)。

b.中綴表示式–是乙個通用的算術或邏輯公式表示方法, 操作符是以中綴形式處於運算元的中間(例:3 + 4),中綴表示式是人們常用的算術表示方法。與字首表示式(例:+ 3 4)或字尾表示式(例:3 4 +)相比,中綴表示式不容易被計算機解析,但仍被許多程式語言使用,因為它符合人們的普遍用法。與字首或字尾記法不同的是,中綴記法中括號是必需的。計算過程中必須用括號將操作符和對應的運算元括起來,用於指示運算的次序。

c.字尾表示式–字尾表示式,又稱逆波蘭式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)

計算器的演算法實現

1.將中綴表示式進行數字和運算子的分離

2.將中綴表示式轉換為字尾表示式

3.通過字尾表示式計算最終結果

所有要計算的中綴表示式中包含

qt–計算器的實現

分離演算法的實現–思想:以符號作為標誌對表示式中的字元逐個訪問

qt–計算器的實現

qt–計算器的實現

中綴轉字尾

中綴表示式轉字尾表示式的過程類似編譯過程

1.四則運算表示式中的括號必須匹配

2.根據運算子優先順序進行轉換

3.轉換後的表示式中沒有括號

4.轉換後可以順序的計算出最終結果

轉換過程的實現:a當前元素e為數字對其輸出;b當前元素e為運算子,先與棧頂運算子進行優先順序比較,當其小於或者等於時將棧頂元素輸出,轉1,如果大於將棧頂元素e入棧;c當前元素e為左括號進行入棧;d當前元素e為右括號時彈出棧頂元素並輸出,直至棧頂元素為左括號,然後將棧頂的左括號從棧中彈出

深圳**建設www.sz886.com

QT實現計算器

1 新建calculatorstandard類和工程檔案 2 使用水平布局和把按鍵依次新增 ui介面如下圖所示 3 在calculatorstandard.h中宣告用到的槽函式 private slots void digitclicked 數字按鍵 void addandsubclicked 加減...

Qt實現 計算器

該計算器主要通過lineedit獲取和顯示數字,通過tableview顯示計算過程。通過tableview顯示計算的過程,qlineedit獲取輸入的數字,qcombobox實現不同的計算型別。效果 計算 void mainwindow on btn cal clicked else if resu...

QT實現簡易計算器

定義a用來儲存lineedit顯示內容 定義b用來儲存運算子等 ifndef widget h define widget h include qt begin namespace namespace ui qt end namespace class widget public qwidget e...