Qt实现计算器功能

作者:梁光林 时间:2022-07-29 06:30:55 

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

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

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

效果:

Qt实现计算器功能

代码:

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的使用方法。

来源:https://blog.csdn.net/c_shell_python/article/details/85066835

标签:Qt,计算器
0
投稿

猜你喜欢

  • SpringBoot项目中遇到的BUG问题及解决方法

    2022-01-19 14:44:38
  • maven无法依赖spring-cloud-stater-zipkin的解决方案

    2023-09-12 01:54:51
  • 一文带你搞懂Redis分布式锁

    2021-09-26 12:56:14
  • IntelliJ IDEA安装目录和设置目录的说明(IntelliJ IDEA快速入门)

    2021-08-16 21:17:08
  • Android实现数字跳动效果的TextView方法示例

    2023-05-24 16:54:29
  • Java中的内部类使用详情

    2022-07-24 05:09:38
  • 基于java集合中的一些易混淆的知识点(详解)

    2023-08-29 03:06:26
  • Java如何修改.class文件变量

    2022-05-18 17:07:50
  • Java陷阱之assert关键字详解

    2023-05-24 20:20:23
  • Android 点击ImageButton时有“按下”的效果的实现

    2022-04-10 05:11:23
  • 可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

    2023-11-28 19:13:58
  • C#实现12306自动登录的方法

    2023-11-07 13:20:27
  • Android编程判断当前应用是否在后台运行的方法示例

    2021-10-29 12:09:36
  • spring mvc4中相关注解的详细讲解教程

    2021-10-11 23:21:17
  • Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)

    2022-11-24 00:47:42
  • Android实现WebView点击拦截跳转原生

    2023-01-06 23:47:38
  • Spring在SingleTon模式下的线程安全详解

    2021-10-08 11:39:31
  • 基于Android Service 生命周期的详细介绍

    2021-09-11 08:11:42
  • c#多线程编程基础

    2021-11-24 23:37:12
  • Android开发解决popupWindow重叠报错问题

    2022-08-02 13:27:01
  • asp之家 软件编程 m.aspxhome.com