翻譯|使用教程|編輯:龔雪|2023-11-20 10:33:25.520|閱讀 148 次
概述:本文將為大家介紹Qt Widget的模擬計(jì)算器的示例,歡迎下載最新版組件體驗(yàn)~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt 是目前最先進(jìn)、最完整的跨平臺(tái)C++開發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺(tái)無差別運(yùn)行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運(yùn)用于超過70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬設(shè)備及應(yīng)用。
本文將展示如何使用信號(hào)和槽來實(shí)現(xiàn)計(jì)算器小部件的功能,以及如何使用QGridLayout在網(wǎng)格中放置子小部件。
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
這個(gè)例子由兩個(gè)類組成:
我們將從回顧計(jì)算器開始,然后再看看按鈕。
class Calculator : public QWidget { Q_OBJECT public: Calculator(QWidget *parent = nullptr); private slots: void digitClicked(); void unaryOperatorClicked(); void additiveOperatorClicked(); void multiplicativeOperatorClicked(); void equalClicked(); void pointClicked(); void changeSignClicked(); void backspaceClicked(); void clear(); void clearAll(); void clearMemory(); void readMemory(); void setMemory(); void addToMemory();
Calculator類提供了一個(gè)簡(jiǎn)單的計(jì)算器小部件,它繼承自QDialog,并且有幾個(gè)與計(jì)算器按鈕相關(guān)聯(lián)的私有槽,重新實(shí)現(xiàn)了()來處理計(jì)算器顯示的鼠標(biāo)事件。
Buttons根據(jù)其操作進(jìn)行分類。例如,所有數(shù)字按鈕(標(biāo)記為0到9)向當(dāng)前操作數(shù)追加一個(gè)數(shù)字。對(duì)于這些,我們將多個(gè)按鈕連接到同一個(gè)插槽(例如,digitClicked())。類別包括數(shù)字、一元運(yùn)算符(Sqrt、x2、1/x)、加法運(yùn)算符(+、-)和乘法運(yùn)算符(x、÷),其他按鈕都有自己的插槽。
private: template<typename PointerToMemberFunction> Button *createButton(const QString &text, const PointerToMemberFunction &member); void abortOperation(); bool calculate(double rightOperand, const QString &pendingOperator);
私有的createButton()函數(shù)被用作小部件構(gòu)造的一部分,abortOperation()在發(fā)生除零操作或?qū)ω?fù)數(shù)進(jìn)行平方根操作時(shí)調(diào)用,Calculate()應(yīng)用二進(jìn)制運(yùn)算符(+、-、x或÷)。
double sumInMemory; double sumSoFar; double factorSoFar; QString pendingAdditiveOperator; QString pendingMultiplicativeOperator; bool waitingForOperand;
這些變量與計(jì)算器顯示的內(nèi)容(QLineEdit)一起編碼計(jì)算器的狀態(tài):
加法運(yùn)算符和乘法運(yùn)算符的處理方式不同,因?yàn)樗鼈兙哂胁煌膬?yōu)先級(jí)。例如,1 + 2 ÷ 3被解釋為1 + (2 ÷ 3),因?yàn)椤碌膬?yōu)先級(jí)高于+。
下表顯示了當(dāng)用戶輸入數(shù)學(xué)表達(dá)式時(shí)計(jì)算器狀態(tài)的演變。
一元操作符,如Sqrt,不需要特殊處理;它們可以立即應(yīng)用,因?yàn)樵趩螕舨僮鞣粹o時(shí)已經(jīng)知道操作數(shù)。
QLineEdit *display; enum { NumDigitButtons = 10 }; Button *digitButtons[NumDigitButtons]; };
最后,聲明與顯示和用于顯示數(shù)字的按鈕相關(guān)聯(lián)的變量。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)