用QT C++写出一个计算器的代码,要含有继承,重载
时间: 2024-02-20 21:58:47 浏览: 126
好的,以下是一个简单的计算器的代码,使用QT C++编写,包含继承和重载:
```cpp
#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
class Calculator : public QMainWindow
{
Q_OBJECT
public:
Calculator(QWidget *parent = nullptr);
~Calculator();
private slots:
void buttonClicked();
private:
QPushButton *buttons[16];
QLineEdit *display;
QGridLayout *layout;
};
Calculator::Calculator(QWidget *parent)
: QMainWindow(parent)
{
display = new QLineEdit();
display->setReadOnly(true);
display->setAlignment(Qt::AlignRight);
display->setText("0");
layout = new QGridLayout();
layout->addWidget(display, 0, 0, 1, 4);
QStringList buttonNames;
buttonNames << "7" << "8" << "9" << "/"
<< "4" << "5" << "6" << "*"
<< "1" << "2" << "3" << "-"
<< "0" << "." << "=" << "+";
for (int i = 0; i < 16; i++) {
buttons[i] = new QPushButton(buttonNames[i]);
connect(buttons[i], SIGNAL(clicked()), this, SLOT(buttonClicked()));
layout->addWidget(buttons[i], i / 4 + 1, i % 4);
}
QWidget *centralWidget = new QWidget();
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
}
Calculator::~Calculator()
{
}
void Calculator::buttonClicked()
{
QPushButton *button = qobject_cast<QPushButton*>(sender());
Q_ASSERT(button != nullptr);
QString buttonText = button->text();
QString displayText = display->text();
if (buttonText == "C") {
display->setText("0");
} else if (buttonText == "CE") {
display->setText("0");
} else if (buttonText == "=") {
double result = 0.0;
QString expression = displayText;
if (expression.contains("+")) {
QStringList operands = expression.split("+");
result = operands[0].toDouble() + operands[1].toDouble();
} else if (expression.contains("-")) {
QStringList operands = expression.split("-");
result = operands[0].toDouble() - operands[1].toDouble();
} else if (expression.contains("*")) {
QStringList operands = expression.split("*");
result = operands[0].toDouble() * operands[1].toDouble();
} else if (expression.contains("/")) {
QStringList operands = expression.split("/");
result = operands[0].toDouble() / operands[1].toDouble();
}
display->setText(QString::number(result));
} else {
if (displayText == "0") {
display->setText(buttonText);
} else {
display->setText(displayText + buttonText);
}
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Calculator w;
w.show();
return a.exec();
}
```
在这个代码中,我们创建了一个名为 Calculator 的类,它继承自 QMainWindow,并包含一个 QLineEdit 对象作为显示器、16个 QPushButton 对象作为按钮以及一个 QGridLayout 对象作为布局管理器。我们还为 Calculator 类定义了一个名为 buttonClicked 的槽函数,用于处理按钮点击事件。
在构造函数中,我们初始化了各种对象,并将它们添加到了布局管理器中。我们还使用 connect 函数将每个按钮的 clicked 信号连接到 buttonClicked 槽函数,以便在用户单击按钮时能够执行相应的操作。
在 buttonClicked 槽函数中,我们首先获取被单击的按钮的文本,并获取当前显示器上的文本。如果单击了 "C" 或 "CE" 按钮,我们将显示器上的文本设置为 "0"。如果单击了 "=" 按钮,我们将显示器上的文本解析为算术表达式,并计算出结果,然后将结果设置为显示器上的文本。如果单击了其他按钮,我们将按钮的文本追加到显示器上的文本后面。
最后,在 main 函数中,我们创建了一个 QApplication 对象、一个 Calculator 对象,并将 Calculator 对象显示出来。
阅读全文