Qt制作简易计算器
CSDN 2024-07-29 10:35:01 阅读 59
此文章旨在记录自己学习内容,内容十分基础,还有许多不完善的地方。本人纯小白。大家就当随便看看。这也是我第一次发表文章,内容冗长,说明不准确也请大家包含 :)
本人用的是Qt Creater 12.0.1(community),安装过程我就省略了,如果真的想学我丑陋的安装手法,之后我再出一篇。
因为技术不成熟,所以该计算器只能计算五位数整数,且不会显示小数。
一、创建项目
1.首先,创建一个项目,然后选择Qt Widgets Application即可。后续安装时,设置名称(名称默认为untitled),路径。
2.在构建系统时请选择CMake。
3.Details处,请在Base class处选择QWidget
4.在构建套件(Kit)中选择在前两项即可。
其他的默认设置保持不变
二、设计UI
确认后,创建一个untitled的项目,并打开文件夹,找到widget.ui,开始设计简易计算器的ui。
我们在左侧的工具栏取用LCD Number作为计算器的显示器,取用Push Button作为按钮,取用Line Edit作为文本框,记录计算时的数据。
设计方面我就不多叙述,因为本人设计拿不上台面...大致情况可如下图所示:
设计时可用栅格布局,以及全部选中并将水平和垂直策略更改为Expanding。
三、代码编写
为了实现计算器,首先需要定义两个字符串变量a、b。
首先,在头文件widget.h中找到private处,在内部加入声明。如下所示:
<code>private:
Ui::Widget *ui;
QString a;
QStringList b;
};
#endif // WIDGET_H
之后,开始编写各个按键的代码,首先编写数字键。在ui界面右键数字按键,并点击转到槽,选择clicked(),之后会自动转入到widget.cpp文件处编写代码。
1.数字按键设计
此处以数字0的按键进行简要说明:
<code>void Widget::on_pushButton_14_clicked() 这是Widget
类中的一个成员函数,名为on_pushButton_14_clicked
。这个函数是当名为pushButton_14
的按钮被点击时自动调用的。
a += "0";
这行代码将字符串"0"
加到变量a
的末尾。如果a
原先的值是"1"
,执行这行代码后,a
的值将变为"10"
。设计什么数字按键,就更改'" "中的数字即可。例如:设计数字7的按键,就将"0"改为"7"。
this->ui->lcdNumber->display(a);
这行代码做了以下几件事 (1)this->ui
: 访问当前对象的UI属性。 (2)lcdNumber
: 从UI中获取一个名为lcdNumber
的LCD数字显示组件。 (3)->display(a)
: 将lcdNumber
显示的内容设置为变量a
的值。因此,如果之前a
的值 是"1230"
,那么LCD数字显示组件将显示这个值。
void Widget::on_pushButton_14_clicked()
{
a += "0"; //此处更改数字
this->ui->lcdNumber->display(a);
}
2.算术运算符按键设计
此处以加号进行简要说明:
void Widget::on_pushButton_8_clicked()
这是Widget
类中的一个成员函数,名为on_pushButton_8_clicked
。这个函数是当名为pushButton_8
的按钮被点击时自动调用的。b.insert(0,a);
在字符串b
的开头插入字符串a
的内容。例如,如果a
是"10"
,那么执行这行代码后,b
将变为"10[原始b的内容]"
。a.clear();
清空字符串a
的内容,将其变为空字符串。b.insert(1,"+");
在字符串b
的第二个位置(索引为1)插入字符"+"
。例如,如果b
是"123abc"
,那么执行这行代码后,b
将变为"1+23abc"
。设计什么按键,就更改'" "中的符号即可。例如:设计除号的按键,就将"+"改为"/"。this->ui->lcdNumber->display(a);
这行代码更新LCD数字显示器的显示内容为字符串a
的值。但因为在第4行,我们已经清空了a
的内容,所以这里显示的内容应该是空字符串。
void Widget::on_pushButton_8_clicked()
{
b.insert(0,a); // 将字符串a插入到字符串b的首位
a.clear(); // 清空字符串a
b.insert(1,"+"); // 在字符串b的第1个位置插入"+"符号
this->ui->lcdNumber->display(a);
}
3.C键清除按键设计
void Widget::on_pushButton_7_clicked()
这是Widget
类中的一个成员函数,名为on_pushButton_7_clicked
。这个函数是当名为pushButton_7
的按钮被点击时自动调用的。b.clear();
清空字符串b
的内容。 a.clear();
清空字符串a
的内容。this->ui->lcdNumber->display("0");
在一个LCD数字显示器上显示数字0
。ui->lineEdit->setText(" ");
将一个名为lineEdit
的文本框的内容设置为一个空格。后续代码更改lineEdit_2和lineEdit_3文本框内容。
void Widget::on_pushButton_7_clicked()
{
b.clear();
a.clear();
this->ui->lcdNumber->display("0");
ui->lineEdit->setText(" "); // 将字符串 'a' 的内容设置为文本框的文本
ui->lineEdit_2->setText(" ");
ui->lineEdit_3->setText(" ");
}
4.等于号按建设计
void Widget::on_pushButton_13_clicked()
这是Widget
类中的一个成员函数,名为on_pushButton_13_clicked
。这个函数是当名为pushButton_13
的按钮被点击时自动调用的。
if (!a.isEmpty() && !b.isEmpty())
检查字符串变量a
和b
是否都不为空。
接下来的几行代码检查字符串b
的第1个字符是否为加减乘除,并执行相应的数学运算: (1)如果第1个字符是"+",则将第0个和第2个字符转换为整数并相加。 (2)如果第1个字符是"-",则将第0个和第2个字符转换为整数并相减。 (3)如果第1个字符是"*",则将第0个和第2个字符转换为整数并相乘。 (4)如果第1个字符是"/",则将第0个和第2个字符转换为整数并相除。
this->ui->lcdNumber->display(v3);
在LCD数字显示器上显示计算结果。
接下来的几行代码设置三个文本框的内容: (1)ui->lineEdit->setText(b.at(2));
: 设置文本框的内容为字符串b
的第2个字符。 (2)ui->lineEdit_2->setText(b.at(1));
: 设置文本框的内容为字符串b
的第1个字符。 (3)ui->lineEdit_3->setText(b.at(0));
: 设置文本框的内容为字符串b
的第0个字符。
void Widget::on_pushButton_13_clicked()
{
if (!a.isEmpty() && !b.isEmpty())
{
b.insert(2, a); // 在字符串b的第2个位置插入字符串a
int v3;
if (b.at(1) == "+") // 判断字符串b的第1个元素是否为"+"
{
v3 = QString(b.at(0)).toInt() + QString(b.at(2)).toInt(); // 将字符串b的第0个和第2个元素转换为整数,并进行加法运算
this->ui->lcdNumber->display(v3);
ui->lineEdit->setText(b.at(2)); // 将字符串 'a' 的内容设置为文本框的文本
ui->lineEdit_2->setText(b.at(1));
ui->lineEdit_3->setText(b.at(0));
}
else if (b.at(1) == "-") // 判断字符串b的第1个元素是否为"-"
{
v3 = QString(b.at(0)).toInt() - QString(b.at(2)).toInt(); // 将字符串b的第0个和第2个元素转换为整数,并进行减法运算
this->ui->lcdNumber->display(v3);
ui->lineEdit->setText(b.at(2));
ui->lineEdit_2->setText(b.at(1));
ui->lineEdit_3->setText(b.at(0));
}
else if (b.at(1) == "*")// 判断字符串b的第1个元素是否为"*"
{
v3 = QString(b.at(0)).toInt() * QString(b.at(2)).toInt(); // 将字符串b的第0个和第2个元素转换为整数,并进行乘法运算
this->ui->lcdNumber->display(v3);
ui->lineEdit->setText(b.at(2));
ui->lineEdit_2->setText(b.at(1));
ui->lineEdit_3->setText(b.at(0));
}
else if (b.at(1) == "/") // 判断字符串b的第1个元素是否为"/"
{
v3 = QString(b.at(0)).toInt() / QString(b.at(2)).toInt(); // 将字符串b的第0个和第2个元素转换为整数,并进行除法运算
this->ui->lcdNumber->display(v3);
ui->lineEdit->setText(b.at(2));
ui->lineEdit_2->setText(b.at(1));
ui->lineEdit_3->setText(b.at(0));
}
// 清空a和b,同时将结果保存到a,以便后续计算
a = QString::number(v3);
b.clear();
}
else {
b.insert(0, a); // 将字符串a插入到字符串b的首位
a.clear(); // 清空字符串a
}
}
四、运行结果
完成后点击右下角的运行,运行结果如下图所示:
这篇拙劣的文章就到此结束了,感谢阅读qwq
上一篇: Unable to make field private JavacProcessingEnvironment$DiscoveredPro报错解决办法
下一篇: 现在有什么赛道可以干到退休?
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。