Qt 是一个功能强大的跨平台 C++ 框架,广泛用于开发图形用户界面(GUI)应用程序。本文将手把手教你如何使用Qt在Windows上实现一个简单的计算器小程序。这个计算器支持四则运算、小数点、百分号等功能。
1. 环境准备
在开始之前,确保你已经安装了以下工具:
-
Qt Creator:Qt 的集成开发环境(IDE)。
-
Qt 库:确保你已经安装了 Qt 库,并且配置好了开发环境。
如果你还没有安装 Qt,可以从 Qt 官方网站 下载并安装。
2. 创建项目
首先,打开 Qt Creator 并创建一个新的 Qt Widgets 应用程序项目。
-
选择 File -> New File or Project。
-
选择 Application -> Qt Widgets Application,然后点击 Choose。
-
输入项目名称,例如
Calculator
,然后选择项目保存的路径。 -
在 Kit Selection 页面,选择你安装的 Qt 版本,然后点击 Next。
-
在 Class Information 页面,保持默认设置,点击 Next,然后点击 Finish。
这个项目主要由以下几个文件组成:
Calculator/
├── main.cpp // 主程序入口
├── calculator.ui // UI界面文件
├── calculator.h // 计算器类的头文件
└── calculator.cpp // 计算器类的实现文件
3. 设计UI界面
3.1 打开calculator.ui
文件
在Qt Creator中,双击calculator.ui
文件,打开Qt Designer。我们将在这里设计计算器的界面。
3.2 添加按钮和显示框
-
显示框:从左侧的Widget Box中拖拽一个
Line Edit
到窗体上,作为计算器的显示框。将其对象名称改为display
。 -
按钮:从Widget Box中拖拽多个
Push Button
到窗体上,分别命名为btn0
,btn1
, ...,btn9
,btnAdd
,btnSubtract
,btnMultiply
,btnDivide
,btnDecimal
,btnPercent
,btnEquals
,btnClear
。这些按钮分别对应数字0-9、加、减、乘、除、小数点、百分号、等于和清除功能。
3.3 布局
将所有按钮和显示框按照计算器的常见布局进行排列。双击部品可以为部品添加显示文言,在右侧的属性栏中可以修改部品的字体大小、类型等属性。
示例图:
4. 代码实现
4.1 主程序入口 (main.cpp
)
主程序的职责是启动应用程序并显示计算器窗口:
#include <QApplication>
#include "calculator.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv); // 创建一个Qt应用程序对象
Calculator calculator; // 创建计算器对象
calculator.show(); // 显示计算器窗口
return app.exec(); // 进入应用程序的主事件循环
}
4.2 计算器类定义 (calculator.h
)
在头文件中,我们定义了 Calculator
类,并声明了槽函数和成员变量:
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QWidget>
namespace Ui {
class Calculator;
}
class Calculator : public QWidget
{
Q_OBJECT
public:
explicit Calculator(QWidget *parent = nullptr); // 构造函数
~Calculator(); // 析构函数
private slots:
void digitClicked(); // 处理数字按钮点击事件
void operatorClicked(); // 处理运算符按钮点击事件
void equalsClicked(); // 处理等于按钮点击事件
void clearClicked(); // 处理清除按钮点击事件
void decimalClicked(); // 处理小数点按钮点击事件
void percentClicked(); // 处理百分号按钮点击事件
private:
Ui::Calculator *ui; // UI界面指针
double firstOperand; // 第一个操作数
double secondOperand; // 第二个操作数
QString pendingOperator; // 待处理的运算符
bool waitingForOperand; // 是否等待操作数
bool operatorOperated; // 运算符是否已操作
};
#endif // CALCULATOR_H
4.3 计算器类实现 (calculator.cpp
)
在实现文件中,我们完成了以下功能:
4.3.1 构造函数
在构造函数中,我们初始化界面并连接信号槽:
Calculator::Calculator(QWidget *parent) :
QWidget(parent),
ui(new Ui::Calculator)
{
// 初始化UI界面
ui->setupUi(this);
ui->display->setText("0");
// 连接数字按钮的点击信号到digitClicked槽函数
for (int i = 0; i < 10; ++i) {
QString buttonName = "btn" + QString::number(i);
QPushButton *button = findChild<QPushButton *>(buttonName);
connect(button, &QPushButton::clicked, this, &Calculator::digitClicked);
}
// 连接运算符按钮的点击信号到operatorClicked槽函数
connect(ui->btnAdd, &QPushButton::clicked, this, &Calculator::operatorClicked);
connect(ui->btnSubtract, &QPushButton::clicked, this, &Calculator::operatorClicked);
connect(ui->btnMultiply, &QPushButton::clicked, this, &Calculator::operatorClicked);
connect(ui->btnDivide, &QPushButton::clicked, this, &Calculator::operatorClicked);
// 连接其他按钮的点击信号到相应的槽函数
connect(ui->btnEquals, &QPushButton::clicked, this, &Calculator::equalsClicked);
connect(ui->btnClear, &QPushButton::clicked, this, &Calculator::clearClicked);
connect(ui->btnDecimal, &QPushButton::clicked, this, &Calculator::decimalClicked);
connect(ui->btnPercent, &QPushButton::clicked, this, &Calculator::percentClicked);
// 初始化变量
firstOperand = 0.0;
secondOperand = 0.0;
pendingOperator = "";
waitingForOperand = true;
operatorOperated = false;
}
4.3.2 数字按钮点击处理 (digitClicked
)
当用户点击数字按钮时,更新显示框的内容:
void Calculator::digitClicked()
{
QPushButton *clickedButton = qobject_cast<QPushButton *>(sender()); // 获取被点击的按钮
QString digitValue = clickedButton->text(); // 获取按钮的文本
QString displayText = ui->display->text(); // 获取当前显示框的文本
if (waitingForOperand) {
ui->display->clear(); // 如果等待操作数,则清空显示框
waitingForOperand = false;
}
// 更新显示框的文本
if ("0" == displayText) {
if (0.0 == digitValue.toDouble()) {
ui->display->setText("0");
} else {
ui->display->setText(digitValue);
}
} else {
if (!operatorOperated) {
ui->display->setText(displayText + digitValue);
} else {
ui->display->setText(digitValue);
}
}
operatorOperated = false;
}
4.3.3 运算符按钮点击处理 (operatorClicked
)
当用户点击运算符按钮时,记录第一个操作数和运算符:
void Calculator::operatorClicked()
{
QPushButton *clickedButton = qobject_cast<QPushButton *>(sender()); // 获取被点击的按钮
QString newOperator = clickedButton->text(); // 获取按钮的文本
if (!operatorOperated) {
if (!pendingOperator.isEmpty()) {
// 如果已经有待处理的运算符,则先计算之前的结果
equalsClicked();
}
}
firstOperand = ui->display->text().toDouble(); // 获取第一个操作数
pendingOperator = newOperator; // 设置待处理的运算符
waitingForOperand = true; // 等待第二个操作数
operatorOperated = true; // 运算符已操作
}
4.3.4 等于按钮点击处理 (equalsClicked
)
当用户点击等于按钮时,计算结果并显示:
void Calculator::equalsClicked()
{
secondOperand = ui->display->text().toDouble(); // 获取第二个操作数
double result = 0.0;
bool error = false;
if ("+" == pendingOperator) {
result = firstOperand + secondOperand;
} else if ("-" == pendingOperator) {
result = firstOperand - secondOperand;
} else if ("*" == pendingOperator) {
result = firstOperand * secondOperand;
} else if ("/" == pendingOperator) {
if (0.0 != secondOperand) {
result = firstOperand / secondOperand;
} else {
error = true;
}
} else {
result = secondOperand;
}
if (!error) {
ui->display->setText(QString::number(result)); // 显示计算结果
} else {
ui->display->setText("Error: Division by zero"); // 显示Error结果
}
pendingOperator = ""; // 清空待处理的运算符
waitingForOperand = true; // 等待新的操作数
operatorOperated = true;
}
4.3.5 其他功能实现
当用户点击等于清除、小数点、百分号按钮时对应处理如下:
void Calculator::clearClicked()
{
ui->display->setText("0"); //清0显示框
firstOperand = 0.0;
secondOperand = 0.0;
pendingOperator = "";
waitingForOperand = true;
operatorOperated = false;
}
void Calculator::decimalClicked()
{
QString displayText = ui->display->text();
// 添加小数点
if (!operatorOperated) {
if (!displayText.contains('.')) {
ui->display->setText(displayText + '.');
}
} else {
ui->display->setText("0.");
}
operatorOperated = false;
}
void Calculator::percentClicked()
{
if (!waitingForOperand) {
double value = ui->display->text().toDouble();
value *= 0.01; // 转换为百分数
ui->display->setText(QString::number(value)); // 显示结果
}
}
5. 运行程序
完成上述步骤后,点击 Run 按钮(Ctrl + R),编译并运行程序。你应该会看到一个简单的计算器窗口,可以进行基本的加减乘除运算。示例如下:
6. 总结
本文,我们一步步实现了一个简单的计算器小程序。我们从项目创建、界面设计到代码编写,详细讲解了每一个步骤。希望这篇文章能对你入门Qt 编程有帮助 ,感兴趣快来试试吧。
下载地址:点击下载源代码