qt如何实现计算器负数加减
时间: 2023-09-05 11:10:05 浏览: 221
在Qt中实现计算器负数加减,可以通过以下步骤实现:
1. 定义一个变量用于存储当前输入的数字,例如定义一个double类型的变量num。
2. 对于输入的数字,如果是负数,可以在数字前面加上负号“-”,例如输入“-2”。
3. 对于加法和减法操作,需要判断当前数字是否为负数,如果是负数,则需要将操作符和下一个数字一起加上括号“()”,例如:(-2)+3 或 (-2)-3。
4. 最后进行计算时,需要将括号去除,并将负数加上符号“-”,例如:(-2)+3 等价于 -2+3。
下面是一个简单的实现示例:
```
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
class Calculator : public QWidget
{
Q_OBJECT
public:
Calculator(QWidget *parent = nullptr) : QWidget(parent)
{
// 设置界面布局
QVBoxLayout *layout = new QVBoxLayout(this);
QHBoxLayout *hLayout1 = new QHBoxLayout();
QHBoxLayout *hLayout2 = new QHBoxLayout();
QHBoxLayout *hLayout3 = new QHBoxLayout();
QHBoxLayout *hLayout4 = new QHBoxLayout();
layout->addLayout(hLayout1);
layout->addLayout(hLayout2);
layout->addLayout(hLayout3);
layout->addLayout(hLayout4);
// 添加数字和操作符按钮
QPushButton *btn0 = new QPushButton(tr("0"));
QPushButton *btn1 = new QPushButton(tr("1"));
QPushButton *btn2 = new QPushButton(tr("2"));
QPushButton *btn3 = new QPushButton(tr("3"));
QPushButton *btn4 = new QPushButton(tr("4"));
QPushButton *btn5 = new QPushButton(tr("5"));
QPushButton *btn6 = new QPushButton(tr("6"));
QPushButton *btn7 = new QPushButton(tr("7"));
QPushButton *btn8 = new QPushButton(tr("8"));
QPushButton *btn9 = new QPushButton(tr("9"));
QPushButton *btnAdd = new QPushButton(tr("+"));
QPushButton *btnSub = new QPushButton(tr("-"));
QPushButton *btnEqual = new QPushButton(tr("="));
QPushButton *btnClear = new QPushButton(tr("C"));
hLayout1->addWidget(btn7);
hLayout1->addWidget(btn8);
hLayout1->addWidget(btn9);
hLayout1->addWidget(btnAdd);
hLayout2->addWidget(btn4);
hLayout2->addWidget(btn5);
hLayout2->addWidget(btn6);
hLayout2->addWidget(btnSub);
hLayout3->addWidget(btn1);
hLayout3->addWidget(btn2);
hLayout3->addWidget(btn3);
hLayout3->addWidget(btnEqual);
hLayout4->addWidget(btn0);
hLayout4->addWidget(btnClear);
// 添加文本框
m_lineEdit = new QLineEdit();
m_lineEdit->setAlignment(Qt::AlignRight);
layout->addWidget(m_lineEdit);
// 连接信号和槽
connect(btn0, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn1, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn2, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn3, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn4, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn5, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn6, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn7, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn8, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btn9, &QPushButton::clicked, this, &Calculator::onNumButtonClicked);
connect(btnAdd, &QPushButton::clicked, this, &Calculator::onOperatorButtonClicked);
connect(btnSub, &QPushButton::clicked, this, &Calculator::onOperatorButtonClicked);
connect(btnEqual, &QPushButton::clicked, this, &Calculator::onEqualButtonClicked);
connect(btnClear, &QPushButton::clicked, this, &Calculator::onClearButtonClicked);
}
private slots:
void onNumButtonClicked()
{
QPushButton *btn = qobject_cast<QPushButton*>(sender());
if(btn)
{
QString text = btn->text();
m_lineEdit->setText(m_lineEdit->text() + text);
}
}
void onOperatorButtonClicked()
{
QPushButton *btn = qobject_cast<QPushButton*>(sender());
if(btn)
{
QString text = btn->text();
m_lineEdit->setText(m_lineEdit->text() + text);
}
}
void onEqualButtonClicked()
{
QString input = m_lineEdit->text();
QRegExp regExp("(-?[0-9.]+)([+-])(-?[0-9.]+)");
if(regExp.indexIn(input) != -1)
{
double num1 = regExp.cap(1).toDouble();
QString op = regExp.cap(2);
double num2 = regExp.cap(3).toDouble();
double result = 0;
if(op == "+")
{
result = num1 + num2;
}
else if(op == "-")
{
result = num1 - num2;
}
m_lineEdit->setText(QString::number(result));
}
}
void onClearButtonClicked()
{
m_lineEdit->clear();
}
private:
QLineEdit *m_lineEdit;
};
```
在上面的实现中,我们使用了QRegExp来匹配输入的数字和操作符,并进行计算。其中,正则表达式“(-?[0-9.]+)([+-])(-?[0-9.]+)”中的“-?”表示可选的负号,[0-9.]+表示匹配数字,[+-]表示匹配加号或减号。