QT计算器的功能实现步骤记录

 更新时间:2025年11月11日 08:24:37   作者:_Aaa小猫香菜批发  
使用Qt制作一个简单的计算器应用是一个很好的项目,可以帮助你熟悉Qt框架的图形用户界面(GUI)设计以及基本的事件处理机制,这篇文章主要介绍了QT计算器功能实现的相关资料,需要的朋友可以参考下

1. 成果UI界面预览

2. 功能简介

(1)数字的加减乘除模运算;

(2)对已输入的数字按位删除功能,一键清除功能;

(3)语音播报:实时播报输入的按键。

3. 实现步骤

1. 创建一个带ui文件的Widget项目

2. 自由设计ui界面

需用到若干按钮(pushButton)和两个行编辑器(lineEdit)

按钮的样式表

设置样式表:选中按钮 -> 右键 -> 改变样式表 -> 输入代码(提供按钮样式表代码如下以供参考)

QPushButton
{
	background-color: rgb(255, 170, 0);
	color: rgb(255, 255, 255);
     border-radius:10px;       /*边框角弧度:0~最小边/2  px;*/
}
/*鼠标悬停样式:伪状态选择*/
QPushButton:hover
{
	font: 700 9pt "Microsoft YaHei UI";
	background-color: rgb(46, 46, 46);
	color: rgb(255, 255, 255);
    border-radius:10px;       /*边框角弧度:0~最小边/2  px;*/
}

3. 完成各个按键的槽函数

生成槽函数步骤:选中按钮 -> 右键 -> 转到槽

(1)语音播报功能的实现

添加头文件 #include <QtTextToSpeech>  ->  定义私有成员变量 QTextToSpeech speaker; -> 在按钮槽函数中使用(在下方的槽函数中实现)

(2)0-9数字按钮

以数字按钮1、2为例,槽函数以及代码实现如下(其他数字按钮槽函数实现方式相同,只需更换按钮名字)

void Widget::on_btnNum_1_clicked()
{
    speaker.say("1");                            //语言播报
    if(ui->lineEdit_show->text() == "0")         //避免出现0开头的数字
        ui->lineEdit_show->setText(ui->btnNum_1->text());
    else
        ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnNum_1->text());
}

void Widget::on_btnNum_2_clicked()
{
    speaker.say("2");                           //语言播报
    if(ui->lineEdit_show->text() == "0")        //避免出现0开头的数字
        ui->lineEdit_show->setText(ui->btnNum_2->text());
    else
        ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnNum_2->text());
}

(3)运算符按钮

以数字按钮 “ 点 ”、“ 加 ”运算符为例,槽函数以及代码实现如下(其他运算符按钮槽函数实现方式相同,只需更换按钮名字)

void Widget::on_btnOpe_point_clicked()
{
    speaker.say("点");
    if (ui->lineEdit_show->text().isEmpty())
    { return; }
    ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnOpe_point->text());
}

void Widget::on_btnOpe_add_clicked()
{
    speaker.say("加");
    if (ui->lineEdit_show->text().isEmpty())
    { return; }
    ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnOpe_add->text());
}

(4)等于按钮

void Widget::on_btnOpe_equal_clicked()
{
    speaker.say("等于");
    QString data = ui->lineEdit_show->text();    //获取用户输入的运算表达式
    ui->lineEdit_result->setText(data);          //将表达式备份到另一个行编辑器
    float res = 0, a, b;
    if(data.contains("%"))
    {
        QStringList lst = data.split("%");
        a = lst[0].toFloat();
        b = lst[1].toFloat();
        res = int(a) % int (b);
    }
    if(data.contains("+"))
    {
        a = data.split("+")[0].toFloat();
        b = data.split("+")[1].toFloat();
        res = a + b;
    }
    if(data.contains("-"))
    {
        a = data.split("-")[0].toFloat();
        b = data.split("-")[1].toFloat();
        res = a - b;
    }
    if(data.contains("×"))
    {
        a = data.split("×")[0].toFloat();
        b = data.split("×")[1].toFloat();
        res = a * b;
    }
    if(data.contains("÷"))
    {
        a = data.split("÷")[0].toFloat();
        b = data.split("÷")[1].toFloat();
        res = a / b;
    }

    ui->lineEdit_show->setText(QString("%1").arg(res));        //%1为占位符
}

(5)按位删除、清空按钮

void Widget::on_btnOpe_del_clicked()
{
    speaker.say("删除");
    // 获取当前文本框内容
    QString currentText = ui->lineEdit_show->text();
    if (!currentText.isEmpty())
    {
        // 删除最后一个字符
        currentText.chop(1);
        // 更新文本框内容
        ui->lineEdit_show->setText(currentText);
    }
}

void Widget::on_btnClear_clicked()
{
    speaker.say("清空");
    ui->lineEdit_show->clear();
}

4. 总结

1. 计算器是很适合QT入门的练手小项目,用到的部件只有按钮和行编辑器,组成较为简单,适合入门理解、熟悉QT的编程框架。

2. 想了解更多QT项目的同学欢迎浏览主页相关文章!

到此这篇关于QT计算器功能实现步骤的文章就介绍到这了,更多相关QT计算器功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文搞懂Codec2解码组件

    一文搞懂Codec2解码组件

    这篇文章主要介绍了Codec2解码组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C语言联合体的实现示例

    C语言联合体的实现示例

    C语言联合体是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 浅谈C++内存管理基础知识

    浅谈C++内存管理基础知识

    这篇文章主要为大家介绍了C++的内存管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • 数据结构顺序表操作示例

    数据结构顺序表操作示例

    这篇文章主要介绍了数据结构顺序表操作示例,其中有在第I个元素前插入数据x,元素从0开始计数、删除第i个元素,元素从0开始计数的方法,需要的朋友可以参考下
    2014-03-03
  • Qt5.9程序打包发布的实现

    Qt5.9程序打包发布的实现

    本文主要介绍了Qt5.9程序打包发布的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Linux下用Valgrind做检查(防止内存泄露)

    Linux下用Valgrind做检查(防止内存泄露)

    Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有一系列的工具,它们完成调试,剖析和一些类似的任务
    2014-01-01
  • C++类成员函数后面加const问题

    C++类成员函数后面加const问题

    这篇文章主要介绍了C++类成员函数后面加const问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言动态内存分配的详解

    C语言动态内存分配的详解

    这篇文章主要介绍了C语言动态内存分配的详解的相关资料,这里提供了实现方法整理和出现错误的解决办法,需要的朋友可以参考下
    2017-07-07
  • Qt下调用vlc库实现RTSP拉流播放和截图过程详解

    Qt下调用vlc库实现RTSP拉流播放和截图过程详解

    这篇文章主要为大家介绍了Qt下调用vlc库实现RTSP拉流播放和截图过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C语言数据结构中定位函数Index的使用方法

    C语言数据结构中定位函数Index的使用方法

    这篇文章主要介绍了C语言数据结构中定位函数Index的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10

最新评论