Qt实现计算器功能

 更新时间:2022年08月22日 10:27:23   作者:梁光林  
这篇文章主要为大家详细介绍了Qt实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Qt实现计算器功能的具体代码,供大家参考,具体内容如下

该计算器主要通过lineEdit获取和显示数字,通过tableview显示计算过程。

通过tableview显示计算的过程,QLineEdit获取输入的数字,QComboBox实现不同的计算类型。

效果:

代码:

main.cpp

#pragma execution_character_set("utf-8")
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowTitle("计算器");
    w.show();
 
    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QStandardItemModel>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int setCount();
 
private slots:
    void on_btn_cal_clicked();
 
private:
    Ui::MainWindow *ui;
    QStandardItemModel *model;
};
 
#endif // MAINWINDOW_H

mainwindow.cpp

#pragma execution_character_set("utf-8")
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QDebug>
#include <QMessageBox>
#include <QStandardItem>
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //初始化model
    model=new QStandardItemModel();
 
    //设置列标题
    model->setHorizontalHeaderItem(0,new QStandardItem("数字A"));
 
    model->setHorizontalHeaderItem(1,new QStandardItem("符号"));
 
    model->setHorizontalHeaderItem(2,new QStandardItem("数字B"));
 
    model->setHorizontalHeaderItem(3,new QStandardItem("结果"));
 
    //将模型与视图绑定
    ui->tableView->setModel(model);
 
    //设置表格单元不能编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
 
    //设置列表宽度
    for(int i=0;i<4;++i)
    {
        ui->tableView->setColumnWidth(i,50);
    }
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
int MainWindow::setCount()
{
    int ret=0;
 
    //获取lineEdit上的内容
    QString num1=ui->num1->text();
    if(num1.isEmpty())
    {
        return -1;
    }
 
    QString num2=ui->num2->text();
    if(num2.isEmpty())
    {
        return -1;
    }
 
    QString symbol=ui->comboBox->currentText();
 
    if(symbol == "+")
    {
        ret=num1.toInt()+num2.toInt();
    }
    else if(symbol == "-")
    {
        ret=num1.toInt()-num2.toInt();
    }
    else if(symbol == "*")
    {
        ret=num1.toInt()*num2.toInt();
    }
    else if(symbol == "/")
    {
        if(num2.toInt()==0)
            return -2;
        ret=num1.toInt()/num2.toInt();
    }
 
    return ret;
}
 
 
//计算
void MainWindow::on_btn_cal_clicked()
{
    int result=setCount();
    if(result==-1)
    {
      QMessageBox::warning(this,"提示","存在输入项为空!","确定");
      ui->result->clear();
      return;
    }
    else if(result==-2)
    {
        QMessageBox::warning(this,"提示","除数为0!","确定");
        ui->result->clear();
        return;
    }
 
    //绑定值到视图中
    model->setItem(0,0,new QStandardItem(ui->num1->text()));
    model->setItem(0,1,new QStandardItem(ui->comboBox->currentText()));
    model->setItem(0,2,new QStandardItem(ui->num2->text()));
    model->setItem(0,3,new QStandardItem(QString::number(result)));
 
    //设置result需要显示的值
    ui->result->setText(QString::number(result));
 
}

以上主要是强化tableview的使用,体会model的使用方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++如何删除map容器中指定值的元素详解

    C++如何删除map容器中指定值的元素详解

    map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • C++标准库中的Stack(堆栈)和Queue(队列)详解

    C++标准库中的Stack(堆栈)和Queue(队列)详解

    在C++标准模板库(STL)中,stack和queue是两种非常重要的容器适配器,这篇文章主要介绍了C++标准库中Stack(堆栈)和Queue(队列)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • C++实现动态烟花效果

    C++实现动态烟花效果

    这篇文章主要介绍了利用C++实现的放烟花程序,用到了EGE图形库,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2022-01-01
  • C++ OpenCV生成蒙太奇图像的示例详解

    C++ OpenCV生成蒙太奇图像的示例详解

    图片的蒙太奇效果,一般称为马赛克图。由很多小图拼接成一个大图。这篇文章主要为大家介绍如何利用C++ OpenCV实现生成蒙太奇图像,感兴趣的可以了解一下
    2022-01-01
  • C++实现LeetCode(两个有序数组的中位数)

    C++实现LeetCode(两个有序数组的中位数)

    这篇文章主要介绍了C++实现LeetCode(两个有序数组的中位数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中的四种类型转换

    C++中的四种类型转换

    类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,
    2015-08-08
  • VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

    VS2017+Qt5+Opencv3.4调用摄像头拍照并存储

    本文主要介绍了VS2017+Qt5+Opencv3.4调用摄像头拍照并存储,实现了视频,拍照,保存这三个功能。具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C语言函数基础教程分类自定义参数及调用示例详解

    C语言函数基础教程分类自定义参数及调用示例详解

    这篇文章主要为大家介绍了C语言函数的基础教程,主要包含C语言函数的分类,C语言函数自定义,C语言函数的参数及C语言函数的调用示例详解,有需要的朋友可以借鉴参考下
    2021-11-11
  • C++中string字符串分割函数split()的4种实现方法

    C++中string字符串分割函数split()的4种实现方法

    最近笔试经常遇到需要对字符串进行快速分割的情景,下面这篇文章主要给大家介绍了关于C++中string字符串分割函数split()的4种实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Visual Studio 2019安装使用C语言程序(VS2019 C语言)

    Visual Studio 2019安装使用C语言程序(VS2019 C语言)

    这篇文章主要介绍了Visual Studio 2019安装使用C语言程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论