介面的**實現
#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...