QT软件开发自制简单计算器

    技术2022-07-11  81

    这个计算器的功能简介

    因为时间没有用很多,更多只是在熟悉和练习使用QT,只能实现一位加减乘除,开方,这些简单的计算,并且输入的数只能选择小数点后一位,多了就不行了哈哈哈。

    1.项目模板选择

    这里选择QMainWindow作为基类,然后选择UI界面。

    2.计算器的UI界面

    如图,布局长这样,有以下部分功能,有的功能没实现,也满做一个样子哈哈哈。 UI很好用,就是一个个按键拖到大概的一个地方,然后使用栅格布局(ctrl+G)。可以适度改以下字体大小什么的,在右边的属性可以改,很简单。

    3.主要代码

    mainwindow.h
    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <math.h> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_button_Backspace_clicked(); void on_button_clear_clicked(); void on_button_clearall_clicked(); void on_button_MC_clicked(); void on_button_7_clicked(); void on_button_8_clicked(); void on_button_9_clicked(); void on_button_chu_clicked(); void on_button_Sqrt_clicked(); void on_button_MR_clicked(); void on_button_4_clicked(); void on_button_5_clicked(); void on_button_6_clicked(); void on_button_cheng_clicked(); void on_button_x262_clicked(); void on_button_MS_clicked(); void on_button_1_clicked(); void on_button_2_clicked(); void on_button_3_clicked(); void on_button_jian_clicked(); void on_button_1x_clicked(); void on_button_M_clicked(); void on_button_0_clicked(); void on_button_dian_clicked(); void on_button_zhengfu_clicked(); void on_button_jia_clicked(); void on_button_result_clicked(); protected: double n1=0,n2=0,result=0; //n1放前一个数,n2放后一个数,result是结果 int whatfuhao=0; //一开始没按符号就是默认0,按了任意一个符号,就输入后一个数字 int xiaoshudian=0; //定义一个小数点,默认为0,按下小数点变成1 QString s; double M=0; //计算器的存储器 public: void readNum(double num) { if(whatfuhao==0) //如果没有按符号 { if(xiaoshudian==0) //如果没有按小数点 { n1=n1*10+num; //刚开始N1为0,当按下第一个数,N1为NUM,当按下第二个数,N1为前一个数的十倍+NUM } else //小数点按下,目前最多只能一位小数的计算 { //pow(x,y)表示x的y次方 n1=n1+num*pow(0.1,1); //刚开始N1为整数,当按下小数点后,N1为整数位加上小数位的十分之一,接下来是加上小数位的百分之一。。。。 xiaoshudian=0; //重新将小数点位置零 } } else { if(xiaoshudian==0) //如果没有按小数点 { n2=n2*10+num; //刚开始N1为0,当按下第一个数,N1为NUM,当按下第二个数,N1为前一个数的十倍+NUM } else //小数点按下,目前最多只能一位小数的计算 { //pow(x,y)表示x的y次方 n2=n2+num*pow(0.1,1); //刚开始N1为整数,当按下小数点后,N1为整数位加上小数位的十分之一,接下来是加上小数位的百分之一。。。。 xiaoshudian=0; //重新将小数点位置零 } } } void Fuhao() //符号的几种可能,最基本的加减乘除 { switch (whatfuhao) { case 1: result=n1+n2; break; case 2: result=n1-n2; break; case 3: result=n1*n2; break; case 4: result=n1/n2; break; case 5: // 1/x result=1/n1; break; case 6: result=n1/262; // x/262 break; case 7: result=sqrt(n1); // 开平方 break; case 8: //内存清除,将存储器设置为0 M=0; break; case 9: //存储回调,获取存储器里面的值 M=result; break; case 10: //存储,将当前显示的值存储到存储器里面 M=result; break; case 11: //存储加,把当前的值加上存储器的值,然后存储结果 M=M+result; break; } n1=result; n2=0; s=QString::number(result,'f',2); } private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
    mainwidow.cpp
    #include "mainwindow.h" #include "ui_mainwindow.h" #include <math.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle("XXX计算器"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_button_Backspace_clicked() { s=s.left(s.length()-1); ui->lineEdit->setText(s); } void MainWindow::on_button_clear_clicked() { s=' '; //初始化,什么都为0,全部清除,显示一个0 n1=0; n2=0; whatfuhao=0; result=0; xiaoshudian=0; ui->lineEdit->setText("0"); } void MainWindow::on_button_clearall_clicked() { s=' '; //初始化,什么都为0,全部清除,没有显示 n1=0; n2=0; whatfuhao=0; result=0; xiaoshudian=0; ui->lineEdit->setText(""); } void MainWindow::on_button_MC_clicked() { whatfuhao=8; } void MainWindow::on_button_7_clicked() { s+="7"; ui->lineEdit->setText(s); readNum(7); } void MainWindow::on_button_8_clicked() { s+="8"; ui->lineEdit->setText(s); readNum(8); } void MainWindow::on_button_9_clicked() { s+="9"; ui->lineEdit->setText(s); readNum(9); } void MainWindow::on_button_chu_clicked() { s+="/"; ui->lineEdit->setText(s); whatfuhao=4; } void MainWindow::on_button_Sqrt_clicked() { whatfuhao=7; } void MainWindow::on_button_MR_clicked() { M=result; QString m1=QString::number(result,'f',2); ui->lineEdit->setText(m1); whatfuhao=9; } void MainWindow::on_button_4_clicked() { s+="4"; ui->lineEdit->setText(s); readNum(4); } void MainWindow::on_button_5_clicked() { s+="5"; ui->lineEdit->setText(s); readNum(5); } void MainWindow::on_button_6_clicked() { s+="6"; ui->lineEdit->setText(s); readNum(6); } void MainWindow::on_button_cheng_clicked() { s+="*"; ui->lineEdit->setText(s); whatfuhao=3; } void MainWindow::on_button_x262_clicked() { whatfuhao=6; } void MainWindow::on_button_MS_clicked() { whatfuhao=10; } void MainWindow::on_button_1_clicked() { s+="1"; ui->lineEdit->setText(s); readNum(1); } void MainWindow::on_button_2_clicked() { s+="2"; ui->lineEdit->setText(s); readNum(2); } void MainWindow::on_button_3_clicked() { s+="3"; ui->lineEdit->setText(s); readNum(3); } void MainWindow::on_button_jian_clicked() { s+="-"; ui->lineEdit->setText(s); whatfuhao=2; } void MainWindow::on_button_1x_clicked() { whatfuhao=5; } void MainWindow::on_button_M_clicked() { whatfuhao=11; } void MainWindow::on_button_0_clicked() { s+="0"; ui->lineEdit->setText(s); readNum(0); } void MainWindow::on_button_dian_clicked() { s+="."; ui->lineEdit->setText(s); xiaoshudian=1; } void MainWindow::on_button_zhengfu_clicked() { //正负之后的计算不知道怎么写 } void MainWindow::on_button_jia_clicked() { s+="+"; ui->lineEdit->setText(s); whatfuhao=1; } void MainWindow::on_button_result_clicked() { Fuhao(); //根据按下的符号进行计算 QString re=QString::number(result,'f',2); ui->lineEdit->setText(re); }

    总结

    功能不多,只是分享学习一下,有错的地方可以帮忙指出来,谢谢。

    Processed: 0.015, SQL: 9