第1个Qt项目:计算器

简介: 第1个Qt项目:计算器

expr.c

学习了Qt基本操作(布局,信号槽等),尝试做一个小的项目:计算器。

参考视频::

https://study.163.com/course/courseLearn.htm?courseId=1005069007#/learn/video?lessonId=1051536137&courseId=1005069007

计算器的样子模仿Windows自带的计算器,但是简化了一些。

         (Windows自带计算器)


一、创建工程:

打开Qt Creator

点击New Project 创建工程。

选择Qt Widgets Application,点击Choose,

按照提示,填写名称和路径,然后下一步。

选择这个 Desktop开头的,然后下一步。

选择基类是QDialog,类名为expr.(或者自己取名)

然后下一步。

然后点完成。

程序创建好了。


 

二、界面设计

 


双击后缀为.ui的文件,进入设计界面。

 

我们在这里进行布局。

模仿windows系统自带计算器,我们设计的计算器的界面为:


设计界面的操作比较简单:上面是一个Label,用于显示,

下面是4x4的按钮区(Push Button)。

设置好界面后,为了方便后面的操作,我们要修改它们的名字。

例如按钮C:功能是清除,名字就改成btn_clear.


三、模型代码

右击我们的项目,选择添加新文件,C++,C++ Class。

然后类名就叫model,

model.h

#ifndef MODEL_H
#define MODEL_H
#include<QString>
 
class model
{
public:
    model();
    //设置数字
    void setNum1(int num);
    void setNum2(int num);
    //设置符号
    void setFlag(QString flag);
    //计算
    int doExpr();
private:
    //用于计算的2个数字num1,num2,符号flag
    int num1;
    int num2;
    QString flag;
    
};
 
#endif // MODEL_H

model.cpp

#include "model.h"
 
model::model()
{
 
}
 
void model::setNum1(int num)
{
    num1 = num;
}
void model::setNum2(int num)
{
    num2 = num;
}
 
void model::setFlag(QString flag)
{
    this->flag = flag;
}
 
int model::doExpr()
{
    int result = 0;
    if(flag == "+")
        result = num1+num2;
    else if(flag == "-")
        result = num1-num2;
    else if (flag == "*")
        result = num1*num2;
    else if(flag == "/")
    {
        if(num2 == 0)
            return "Error";
        else
            result = num1 / num2;
    }
        
    return result;
  
}

四、控制器代码

将模型和界面(在窗口初始化时,即expr的构造函数中)连接起来。 方式: 信号槽

需要连接的东西:

当按下数字键0-9 时,获取数字。

例如:

connect(this->ui->btn_0, SIGNAL(clicked(bool)),this,SLOT(getBtn0()) );

或者直接在界面设计的地方点击按钮--转到槽,写槽函数。

以下是相关源码

expr.h

#ifndef EXPR_H
#define EXPR_H
#include<QString>
#include <QDialog>
#include"model.h"
namespace Ui {
class expr;
}
 
class expr : public QDialog
{
    Q_OBJECT
 
public:
    explicit expr(QWidget *parent = 0);
    ~expr();
private slots:
    void getBtn0();
    void getBtn1();
    void getBtn2();
 
    void on_btn_3_clicked();
 
    void on_btn_4_clicked();
 
    void on_btn_5_clicked();
 
    void on_btn_6_clicked();
 
    void on_btn_7_clicked();
 
    void on_btn_8_clicked();
 
    void on_btn_9_clicked();
 
    void on_btn_plus_clicked();
 
    void on_btn_sub_clicked();
 
    void on_btn_mult_clicked();
 
    void on_btn_divid_clicked();
 
    void on_btn_equal_clicked();
 
    void on_btn_clear_clicked();
 
private:
    Ui::expr *ui;
    QString tmp;
    model * model1;
};
 
#endif // EXPR_H

expr.c

#include "expr.h"
#include "ui_expr.h"
#include"model.h"
expr::expr(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::expr)
{
    model1 = new model;
    ui->setupUi(this);
    connect(this->ui->btn_0, SIGNAL(clicked(bool)),this,SLOT(getBtn0()) );
    connect(this->ui->btn_1, SIGNAL(clicked(bool)),this, SLOT(getBtn1()));
    connect(this->ui->btn_2, SIGNAL(clicked(bool)),this, SLOT(getBtn2()));
    tmp = "";
}
 
expr::~expr()
{
    delete ui;
}
void expr::getBtn0()
{
    if(tmp != "")
    {
        tmp +=this->ui->btn_0->text();
        this->ui->lbl_display->setText(tmp);
    }
}
void expr::getBtn1()
{
    tmp +=this->ui->btn_1->text();
    this->ui->lbl_display->setText(tmp);
}
void expr::getBtn2()
{
    tmp +=this->ui->btn_2->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_3_clicked()
{
    tmp +=this->ui->btn_3->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_4_clicked()
{
    tmp +=this->ui->btn_4->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_5_clicked()
{
    tmp +=this->ui->btn_5->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_6_clicked()
{
    tmp +=this->ui->btn_6->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_7_clicked()
{
    tmp +=this->ui->btn_7->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_8_clicked()
{
    tmp +=this->ui->btn_8->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_9_clicked()
{
    tmp +=this->ui->btn_9->text();
    this->ui->lbl_display->setText(tmp);
}
 
void expr::on_btn_plus_clicked()
{
    int num = tmp.toInt();
    model1->setNum1(num);
    tmp = "";
    QString ex = ui->btn_plus->text();
    model1->setFlag(ex);
}
 
void expr::on_btn_sub_clicked()
{
    int num = tmp.toInt();
    model1->setNum1(num);
    tmp = "";
    QString ex = ui->btn_sub->text();
    model1->setFlag(ex);
}
 
void expr::on_btn_mult_clicked()
{
    int num = tmp.toInt();
    model1->setNum1(num);
    tmp = "";
    QString ex = ui->btn_mult->text();
    model1->setFlag(ex);
}
 
void expr::on_btn_divid_clicked()
{
    int num = tmp.toInt();
    model1->setNum1(num);
    tmp = "";
    QString ex = ui->btn_divid->text();
    model1->setFlag(ex);
}
 
void expr::on_btn_equal_clicked()
{
    int num = tmp.toInt();
    model1->setNum2(num);
    QString res = model1->doExpr();
    ui->lbl_display->setText(res);
    tmp = "";
}
 
void expr::on_btn_clear_clicked()
{
    tmp = "";
    ui->lbl_display->setText("0");
}

做这个项目的步骤:

1.设计界面V

2.模型M

3.控制C

相关文章
|
1月前
|
网络协议 容器
【qt】 TCP编程小项目
【qt】 TCP编程小项目
40 0
|
2月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
118 4
|
1月前
【qt】平面CAD(计算机辅助设计 )项目 上
【qt】平面CAD(计算机辅助设计 )项目 上
24 0
|
1月前
【qt】项目移植
【qt】项目移植
15 0
【qt】项目移植
|
1月前
【Qt项目专栏】贪吃蛇小游戏1.0
【Qt项目专栏】贪吃蛇小游戏1.0
64 5
|
30天前
CMake自动打包--Qt项目
CMake自动打包--Qt项目
44 0
|
1月前
|
数据安全/隐私保护
【qt】考试系统项目
【qt】考试系统项目
30 0
|
1月前
|
XML Linux 程序员
【Qt】项目代码
【Qt】项目代码
|
2月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
3月前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面