qt计算器
- 目录
- 注释部分
- 模块配置
- 目标配置
- 模板配置
- 源文件配置
- 头文件配置
- UI 文件配置
- 1. 头文件保护宏
- 2. 包含必要的头文件
- 3. 命名空间声明
- 4. 类的定义
- 5. 构造函数和析构函数
- 6. 私有槽函数
- 7. 私有成员变量
- 8. 头文件保护宏结束
- 1. 包含头文件
- 2. 构造函数 `MainWindow::MainWindow(QWidget *parent)`
- 3. 析构函数 `MainWindow::~MainWindow()`
- 4. 按钮点击事件处理函数 `MainWindow::on_pushButton_clicked()`
- 5. 文本编辑框 1 文本编辑事件处理函数 `MainWindow::on_lineEdit_1_textEdited(const QString &arg1)`
- 6. 文本编辑框 2 文本编辑事件处理函数 `MainWindow::on_lineEdit_2_textEdited(const QString &arg1)`
- 7. 下拉框当前文本改变事件处理函数 `MainWindow::on_comboBox_currentTextChanged(const QString &arg1)`
- 总结
目录
注释部分
#-------------------------------------------------
#
# Project created by QtCreator 2025-02-19T14:23:43
#
#-------------------------------------------------
这是一段注释内容,表明该项目是由 Qt Creator 在 2025 年 2 月 19 日 14 时 23 分 43 秒创建的。注释在 .pro
文件中不影响实际的项目配置,主要用于提供一些说明信息。
模块配置
QT += core gui
QT
:是一个用于指定项目所需 Qt 模块的配置项。+=
:表示在原有模块的基础上追加新的模块。core
:是 Qt 的核心模块,提供了 Qt 框架的基础功能,如对象系统、事件循环、文件操作、字符串处理等。gui
:是 Qt 的图形用户界面模块,包含了创建图形界面所需的各种类和功能,像窗口、按钮、文本框等控件的相关类都在这个模块中。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
greaterThan(QT_MAJOR_VERSION, 4)
:这是一个条件判断表达式。QT_MAJOR_VERSION
代表当前使用的 Qt 版本的主版本号,该表达式判断主版本号是否大于 4。:
:如果前面的条件成立,就执行后面的语句。QT += widgets
:如果 Qt 主版本号大于 4,就追加widgets
模块。widgets
模块是 Qt 5 及更高版本引入的,提供了更多高级的图形界面组件和功能。
目标配置
TARGET = prj
TARGET
:用于指定生成的可执行文件或库的名称。这里表示最终生成的可执行文件名为prj
。
模板配置
TEMPLATE = app
TEMPLATE
:指定项目的模板类型。app
表示这是一个应用程序项目,最终会生成一个可执行文件。除了app
,常见的模板类型还有lib
(用于创建库项目)等。
源文件配置
SOURCES += main.cpp\mainwindow.cpp
SOURCES
:指定项目中包含的源文件列表。+=
:表示追加源文件。main.cpp
:通常是程序的入口文件,包含main
函数,程序从这里开始执行。mainwindow.cpp
:是自定义主窗口类的实现文件,包含该类成员函数的具体实现代码。\
:是换行符,用于将较长的列表拆分成多行,方便阅读和编辑,表明下一行的内容也是该配置项的一部分。
头文件配置
HEADERS += mainwindow.h
HEADERS
:指定项目中包含的头文件列表。+=
:表示追加头文件。mainwindow.h
:是自定义主窗口类的头文件,包含该类的声明,如类的成员变量、成员函数的声明等。
UI 文件配置
FORMS += mainwindow.ui
FORMS
:指定项目中包含的 UI 文件列表。+=
:表示追加 UI 文件。mainwindow.ui
:是使用 Qt Designer 可视化设计的主窗口界面文件,通过该文件可以方便地设计窗口的布局和控件。
综上所述,这个
.pro
文件配置了一个名为prj
的 Qt 应用程序项目,使用了core
、gui
和
widgets
模块,包含main.cpp
和mainwindow.cpp
源文件、mainwindow.h
头文件以及
mainwindow.ui
UI 文件。
这段代码是一个 Qt 项目中 MainWindow
类的头文件 mainwindow.h
,下面为你逐行解释其含义。
1. 头文件保护宏
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
这是头文件保护机制,也称为预处理器守卫。其作用是防止头文件被重复包含,避免因重复定义导致的编译错误。当第一次包含该头文件时,MAINWINDOW_H
未被定义,因此会执行 #define MAINWINDOW_H
定义该宏,后续再次包含该头文件时,由于 MAINWINDOW_H
已被定义,#ifndef
条件不成立,头文件内容将被跳过。
2. 包含必要的头文件
#include <QMainWindow>
包含了 QMainWindow
类的头文件。QMainWindow
是 Qt 中用于创建主窗口的基类,它提供了菜单栏、工具栏、状态栏等常见主窗口元素的支持。
3. 命名空间声明
namespace Ui {
class MainWindow;
}
声明了一个名为 Ui
的命名空间,并在其中声明了 MainWindow
类。这个 Ui::MainWindow
类是由 Qt Designer 自动生成的,用于管理 mainwindow.ui
文件中设计的界面元素。
4. 类的定义
class MainWindow : public QMainWindow
{Q_OBJECT
定义了一个名为 MainWindow
的类,它继承自 QMainWindow
。Q_OBJECT
是一个宏,它是 Qt 元对象系统的核心部分,用于支持信号与槽机制、动态属性系统等高级特性。任何使用信号与槽机制的类都必须包含这个宏。
5. 构造函数和析构函数
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();
explicit MainWindow(QWidget *parent = 0);
:这是MainWindow
类的构造函数。explicit
关键字用于防止隐式类型转换。parent
是一个指向父窗口的指针,默认值为0
(即nullptr
),表示该窗口没有父窗口。~MainWindow();
:这是MainWindow
类的析构函数,用于在对象销毁时进行资源清理工作。
6. 私有槽函数
private slots:void on_pushButton_clicked();void on_lineEdit_1_textEdited(const QString &arg1);void on_lineEdit_2_textEdited(const QString &arg1);void on_comboBox_currentTextChanged(const QString &arg1);
private slots
:这是 Qt 中槽函数的声明区域。槽函数是一种特殊的成员函数,用于响应信号。on_pushButton_clicked()
:当名为pushButton
的按钮被点击时,该槽函数会被调用。on_lineEdit_1_textEdited(const QString &arg1)
:当名为lineEdit_1
的文本编辑框中的文本被编辑时,该槽函数会被调用,arg1
是编辑后的文本内容。on_lineEdit_2_textEdited(const QString &arg1)
:当名为lineEdit_2
的文本编辑框中的文本被编辑时,该槽函数会被调用,arg1
是编辑后的文本内容。on_comboBox_currentTextChanged(const QString &arg1)
:当名为comboBox
的下拉框中当前选中的文本发生变化时,该槽函数会被调用,arg1
是新选中的文本内容。
7. 私有成员变量
private:Ui::MainWindow *ui;
定义了一个私有成员变量 ui
,它是一个指向 Ui::MainWindow
类对象的指针。这个指针用于访问 mainwindow.ui
文件中设计的界面元素,通过它可以在代码中操作界面上的各种控件。
8. 头文件保护宏结束
#endif // MAINWINDOW_H
结束头文件保护宏,与开头的 #ifndef MAINWINDOW_H
和 #define MAINWINDOW_H
相对应。
综上所述,这个头文件定义了一个
MainWindow
类,它继承自
QMainWindow
,包含构造函数、析构函数和一些用于处理界面元素事件的槽函数,同时使用Ui::MainWindow
指针来管理界面元素。
这段代码是 mainwindow.cpp
文件,它实现了 MainWindow
类中声明的函数,主要功能是创建一个简单的计算器界面,处理界面上控件的交互事件并进行相应的计算。下面为你逐行详细解释:
1. 包含头文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mainwindow.h"
:包含自定义的MainWindow
类的头文件,其中声明了MainWindow
类的成员函数和成员变量。#include "ui_mainwindow.h"
:包含由 Qt Designer 自动生成的界面类的头文件,该文件中定义了Ui::MainWindow
类,用于管理mainwindow.ui
文件中设计的界面元素。
2. 构造函数 MainWindow::MainWindow(QWidget *parent)
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}
MainWindow::MainWindow(QWidget *parent)
:这是MainWindow
类的构造函数定义。QMainWindow(parent)
:调用基类QMainWindow
的构造函数,将传入的父窗口指针parent
传递给它。ui(new Ui::MainWindow)
:使用new
运算符动态创建一个Ui::MainWindow
对象,并将其地址赋值给成员变量ui
。ui->setupUi(this)
:调用Ui::MainWindow
对象的setupUi
方法,将当前MainWindow
对象this
作为参数传入,该方法会将mainwindow.ui
文件中设计的界面元素设置到当前窗口中。
3. 析构函数 MainWindow::~MainWindow()
MainWindow::~MainWindow()
{delete ui;
}
MainWindow::~MainWindow()
:这是MainWindow
类的析构函数定义。delete ui
:释放之前在构造函数中动态分配的Ui::MainWindow
对象的内存,防止内存泄漏。
4. 按钮点击事件处理函数 MainWindow::on_pushButton_clicked()
void MainWindow::on_pushButton_clicked()
{int line1 = ui->lineEdit_1->text().toInt();int line2 = ui->lineEdit_2->text().toInt();int line3;QString sFlag = ui->comboBox->currentText();if (sFlag == "+"){line3 = line1 + line2;}else if(sFlag == "-"){line3 = line1 - line2;}else if(sFlag == "*"){line3 = line1 * line2;}else if(sFlag == "/"){line3 = line1 / line2;}else{ui->lineEdit_3->setText("error");return;}QString str = QString::number(line3);ui->lineEdit_3->setText(str);
}
- 当界面上的
pushButton
被点击时,该函数会被调用。 int line1 = ui->lineEdit_1->text().toInt();
和int line2 = ui->lineEdit_2->text().toInt();
:从lineEdit_1
和lineEdit_2
文本编辑框中获取用户输入的文本,并将其转换为整数类型。QString sFlag = ui->comboBox->currentText();
:从comboBox
下拉框中获取当前选中的运算符。- 根据运算符进行相应的计算,并将结果存储在
line3
中。 - 如果运算符不是
+
、-
、*
、/
中的任何一个,则在lineEdit_3
中显示error
。 QString str = QString::number(line3);
:将计算结果line3
转换为字符串类型。ui->lineEdit_3->setText(str);
:将计算结果显示在lineEdit_3
文本编辑框中。
5. 文本编辑框 1 文本编辑事件处理函数 MainWindow::on_lineEdit_1_textEdited(const QString &arg1)
void MainWindow::on_lineEdit_1_textEdited(const QString &arg1)
{int line1 = arg1.toInt();int line2 = ui->lineEdit_2->text().toInt();int line3 = line1 + line2;QString str = QString::number(line3);ui->lineEdit_3->setText(str);
}
- 当
lineEdit_1
文本编辑框中的文本被编辑时,该函数会被调用。 int line1 = arg1.toInt();
:将编辑后的文本arg1
转换为整数类型。int line2 = ui->lineEdit_2->text().toInt();
:从lineEdit_2
文本编辑框中获取用户输入的文本,并将其转换为整数类型。- 计算
line1
和line2
的和,并将结果存储在line3
中。 - 将计算结果转换为字符串类型,并显示在
lineEdit_3
文本编辑框中。
6. 文本编辑框 2 文本编辑事件处理函数 MainWindow::on_lineEdit_2_textEdited(const QString &arg1)
void MainWindow::on_lineEdit_2_textEdited(const QString &arg1)
{int line1 = ui->lineEdit_1->text().toInt();int line2 = arg1.toInt();int line3 = line1 + line2;QString str = QString::number(line3);ui->lineEdit_3->setText(str);
}
- 当
lineEdit_2
文本编辑框中的文本被编辑时,该函数会被调用。 - 从
lineEdit_1
文本编辑框中获取用户输入的文本,并将其转换为整数类型。 - 将编辑后的文本
arg1
转换为整数类型。 - 计算
line1
和line2
的和,并将结果存储在line3
中。 - 将计算结果转换为字符串类型,并显示在
lineEdit_3
文本编辑框中。
7. 下拉框当前文本改变事件处理函数 MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
void MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
{int line1 = ui->lineEdit_1->text().toInt();int line2 = ui->lineEdit_2->text().toInt();int line3;QString sFlag = ui->comboBox->currentText();if (sFlag == "+"){line3 = line1 + line2;}else if(sFlag == "-"){line3 = line1 - line2;}else if(sFlag == "*"){line3 = line1 * line2;}else if(sFlag == "/"){line3 = line1 / line2;}else{ui->lineEdit_3->setText("error");return;}QString str = QString::number(line3);ui->lineEdit_3->setText(str);
}
- 当
comboBox
下拉框中当前选中的文本发生变化时,该函数会被调用。- 从
lineEdit_1
和lineEdit_2
文本编辑框中获取用户输入的文本,并将其转换为整数类型。- 根据当前选中的运算符进行相应的计算,并将结果存储在
line3
中。- 如果运算符不是
+
、-
、*
、/
中的任何一个,则在lineEdit_3
中显示error
。- 将计算结果转换为字符串类型,并显示在
lineEdit_3
文本编辑框中。
总结
这段代码实现了一个简单的计算器界面的交互逻辑,通过处理按钮点击、文本编辑和下拉框选择等事件,根据用户输入的数字和运算符进行相应的计算,并将结果显示在界面上。