qt设计一个计算机的代码
时间: 2024-03-10 07:44:36 浏览: 82
好的,下面是一个简单的Qt计算器的代码,包括界面和基本的计算逻辑。这里的代码只实现了加减乘除四种基本运算,你可以根据需要进行修改和扩展。
mainwindow.h:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include <QPushButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void digitClicked();
void operatorClicked();
void clearClicked();
void equalsClicked();
private:
QLineEdit *display;
QPushButton *digitButtons[10];
QPushButton *addButton;
QPushButton *subtractButton;
QPushButton *multiplyButton;
QPushButton *divideButton;
QPushButton *clearButton;
QPushButton *equalsButton;
QString pendingOperator;
double operand1;
double operand2;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// Create display widget
display = new QLineEdit(this);
display->setReadOnly(true);
display->setAlignment(Qt::AlignRight);
display->setMaxLength(15);
display->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
// Create digit buttons
for (int i = 0; i < 10; ++i) {
digitButtons[i] = new QPushButton(QString::number(i), this);
digitButtons[i]->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
// Create operator buttons
addButton = new QPushButton("+", this);
subtractButton = new QPushButton("-", this);
multiplyButton = new QPushButton("*", this);
divideButton = new QPushButton("/", this);
clearButton = new QPushButton("C", this);
equalsButton = new QPushButton("=", this);
// Create layout
QGridLayout *layout = new QGridLayout;
layout->addWidget(display, 0, 0, 1, 4);
layout->addWidget(digitButtons[7], 1, 0);
layout->addWidget(digitButtons[8], 1, 1);
layout->addWidget(digitButtons[9], 1, 2);
layout->addWidget(addButton, 1, 3);
layout->addWidget(digitButtons[4], 2, 0);
layout->addWidget(digitButtons[5], 2, 1);
layout->addWidget(digitButtons[6], 2, 2);
layout->addWidget(subtractButton, 2, 3);
layout->addWidget(digitButtons[1], 3, 0);
layout->addWidget(digitButtons[2], 3, 1);
layout->addWidget(digitButtons[3], 3, 2);
layout->addWidget(multiplyButton, 3, 3);
layout->addWidget(digitButtons[0], 4, 0, 1, 2);
layout->addWidget(divideButton, 4, 3);
layout->addWidget(clearButton, 5, 0);
layout->addWidget(equalsButton, 5, 1, 1, 2);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
// Connect signals and slots
for (int i = 0; i < 10; ++i) {
connect(digitButtons[i], &QPushButton::clicked, this, &MainWindow::digitClicked);
}
connect(addButton, &QPushButton::clicked, this, &MainWindow::operatorClicked);
connect(subtractButton, &QPushButton::clicked, this, &MainWindow::operatorClicked);
connect(multiplyButton, &QPushButton::clicked, this, &MainWindow::operatorClicked);
connect(divideButton, &QPushButton::clicked, this, &MainWindow::operatorClicked);
connect(clearButton, &QPushButton::clicked, this, &MainWindow::clearClicked);
connect(equalsButton, &QPushButton::clicked, this, &MainWindow::equalsClicked);
// Initialize variables
pendingOperator = "";
operand1 = 0.0;
operand2 = 0.0;
}
MainWindow::~MainWindow()
{
}
void MainWindow::digitClicked()
{
QPushButton *button = qobject_cast<QPushButton *>(sender());
if (button) {
QString digit = button->text();
QString text = display->text();
if (text == "0") {
text = digit;
} else {
text += digit;
}
display->setText(text);
}
}
void MainWindow::operatorClicked()
{
QPushButton *button = qobject_cast<QPushButton *>(sender());
if (button) {
QString op = button->text();
if (pendingOperator == "") {
operand1 = display->text().toDouble();
pendingOperator = op;
display->setText("");
} else {
operand2 = display->text().toDouble();
if (pendingOperator == "+") {
operand1 += operand2;
} else if (pendingOperator == "-") {
operand1 -= operand2;
} else if (pendingOperator == "*") {
operand1 *= operand2;
} else if (pendingOperator == "/") {
if (operand2 == 0.0) {
display->setText("Error");
return;
} else {
operand1 /= operand2;
}
}
pendingOperator = op;
display->setText(QString::number(operand1));
}
}
}
void MainWindow::clearClicked()
{
pendingOperator = "";
operand1 = 0.0;
operand2 = 0.0;
display->setText("0");
}
void MainWindow::equalsClicked()
{
if (pendingOperator != "") {
operand2 = display->text().toDouble();
if (pendingOperator == "+") {
operand1 += operand2;
} else if (pendingOperator == "-") {
operand1 -= operand2;
} else if (pendingOperator == "*") {
operand1 *= operand2;
} else if (pendingOperator == "/") {
if (operand2 == 0.0) {
display->setText("Error");
return;
} else {
operand1 /= operand2;
}
}
pendingOperator = "";
display->setText(QString::number(operand1));
}
}
```
在这个例子中,我们将QPushButton控件的clicked信号连接到对应的槽函数中,这样当用户点击按钮时,对应的槽函数就会被调用。digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,clearClicked()槽函数用于处理“C”按钮的点击事件,equalsClicked()槽函数用于处理“=”按钮的点击事件。
在每个槽函数中,我们使用QLineEdit控件的setText()函数来更新计算结果。对于运算符按钮,我们将操作数1和操作数2存储在类成员变量中,并在用户点击“=”按钮时进行计算。注意,在计算除法时,我们需要检查除数是否为0,如果是,就显示“Error”。
这只是一个简单的例子,你可以根据需要进行修改和扩展。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)