项目介绍
项目的目标是实现一个多功能的计算器,下图是计算器在完成之后的菜单布局,从中可以看出计算器的功能。
图中是一个基本的计算器界面,本篇文章的内容就是搭建这样一个界面并实现逻辑。
创建新项目
本人使用的工具是QtCreator,从理论上说也可以使用其它支持QT的工具,创建项目的过程以QtCreator为例。
第一步:在软件菜单中点击,文件->新建文件或项目
第二步:选择“Qt Widgets Application”,点击“Choose…”
第三步:设置项目
- 名称随便起,我起的是calc
- 创建路径可以保持默认,建议自己选一个路径
- 复选框可选可不选
这里的类名和文件名可以随便起,只要符合c++的命名规范,但一定要选择创建ui文件
其它选项保持默认就行
搭建界面
本人不怎么讲究界面布局,窗口和控件的大小都是随便拖出来的,这里放张图用来参考,图中方格的名称叫Grid Layout,可以将控件沿网格排布。计算器屏幕的名称叫Text Edit。
这里有一个命名表,建议按照表中的内容给各个控件命名,因为代码中会用到这些名称。同时在头文件中定义好相应的槽函数,并且在mainwindow.cpp中绑定控件和槽函数。
控件描述 | 控件名称 |
---|---|
+按钮 | btnPlus |
-按钮 | btnMinus |
*按钮 | btnMul |
/按钮 | btnDiv |
0按钮 | button0 |
1按钮 | button1 |
2按钮 | button2 |
3按钮 | button3 |
4按钮 | button4 |
5按钮 | button5 |
6按钮 | button6 |
7按钮 | button7 |
8按钮 | button8 |
9按钮 | button9 |
.按钮 | btnDot |
退格按钮 | btnDel |
重置按钮 | init |
正负按钮 | btnPM |
=按钮 | btnEqu |
开根号按钮 | btnSqrt |
显示屏 | screen |
Grid Layout | None |
控件名称 | 信号函数 | 槽函数 | 槽函数参数 |
---|---|---|---|
btnPlus | QPushButton::clicked() | MainWindow::calcBtnPushed() | QString “plus” |
btnMinus | QPushButton::clicked() | MainWindow::calcBtnPushed() | QString “minus” |
btnMul | QPushButton::clicked() | MainWindow::calcBtnPushed() | QString “mul” |
btnDiv | QPushButton::clicked() | MainWindow::calcBtnPushed() | QString “div” |
button0 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 0 |
button1 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 1 |
button2 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 2 |
button3 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 3 |
button4 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 4 |
button5 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 5 |
button6 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 6 |
button7 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 7 |
button8 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 8 |
button9 | QPushButton::clicked() | MainWindow::numBtnPushed() | double 9 |
btnDot | QPushButton::clicked() | MainWindow::dotBtnPushed() | None |
btnDel | QPushButton::clicked() | MainWindow::delBtnPushed() | None |
init | QPushButton::clicked() | MainWindow::reBtnPushed() | None |
btnPM | QPushButton::clicked() | MainWindow::btnPMpushed() | None |
btnEqu | QPushButton::clicked() | MainWindow::equalBtnPushed() | None |
btnSqrt | QPushButton::clicked() | MainWindow::sqrtBtnPushed() | None |
// mainwindow.h
void numBtnPushed(double number);
void delBtnPushed();
void reBtnPushed();
void calcBtnPushed(QString btnName);
void equalBtnPushed();
void sqrtBtnPushed();
double calcHandle(QString calcType);
void dotBtnPushed();
void btnPMPushed();
// mainwindow.cpp
//数字按钮信号连接
connect(ui->button0,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(0);});
connect(ui->button1,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(1);});
connect(ui->button2,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(2);});
connect(ui->button3,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(3);});
connect(ui->button4,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(4);});
connect(ui->button5,&QPushButton::clicked,this,[=]{
MainWindow::numBtnPushed(5);});
connect(ui