QT学习笔记—— 编写一个简单的计算器
Posted 玛丽莲茼蒿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习笔记—— 编写一个简单的计算器相关的知识,希望对你有一定的参考价值。
一、UI布局
- 新建项目的时候选择 QMainWindow
- 一开始进去的时候QT Designer是灰色的不能用,解决方法:
(1)点击IDE左下角的Debug
(2)去Forms文件夹里双击.ui文件就可以了
- 详解布局
(1) 5.14.2版本的有四种布局,在右边
(2)选中空白区域,点击上面一栏任意布局,整体的布局就变了;整体布局在右边查看(根据centralwidget左边的图案判断)
(3)红色箭头指向的地方可以取消选中的布局
(4)怎样设计布局?
首先要有控件
,选中控件以后再去点布局。
- 计算器的布局设计
右边两个红色的框框出来的是控件的名字,写mainwindow.cpp文件时需要用到,具体用法是ui->控件名字
。
二、在头文件中添加凹槽、必要的成员变量
- 文件mainwindow.h
- 在private处添加必要的成员变量,作用见注释
- 凹槽slots对应着某个事件发生后,触发的那个函数。
- 添加的内容如下
private:
int empty = 1; // empty=1时,应该向label_value1输入; empty=2时,应该向label_value2输入
int sign = 0; // 记录label_sign里的符号是什么,1=add;2=sub;4=div;3=mul
private slots:
void onPushButton_0_Clicked();
void onPushButton_1_Clicked();
void onPushButton_2_Clicked();
void onPushButton_3_Clicked();
void onPushButton_4_Clicked();
void onPushButton_5_Clicked();
void onPushButton_6_Clicked();
void onPushButton_7_Clicked();
void onPushButton_8_Clicked();
void onPushButton_9_Clicked();
void onPushButton_add_Clicked();
void onPushButton_sub_Clicked();
void onPushButton_mul_Clicked();
void onPushButton_div_Clicked();
void onPushButton_equ_Clicked();
void onPushButton_clear_Clicked();
三、完整project(粘过去就能运行的那种)
思路:
为了简单起见,我将输入框拆成了两个(这样就不用切割字符串了哈哈哈),用empty这个成员变量来判断应该写入第一个还是第二个。实现的逻辑非常简单啦,逻辑只写了一个小时左右,下面的注释也很清晰,应该能看懂。
- mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
int empty = 1; // empty=1时,应该向label_value1输入; empty=2时,应该向label_value2输入
int sign = 0; // 记录label_sign里的符号是什么,1=add;2=sub;4=div;3=mul
private slots:
void onPushButton_0_Clicked();
void onPushButton_1_Clicked();
void onPushButton_2_Clicked();
void onPushButton_3_Clicked();
void onPushButton_4_Clicked();
void onPushButton_5_Clicked();
void onPushButton_6_Clicked();
void onPushButton_7_Clicked();
void onPushButton_8_Clicked();
void onPushButton_9_Clicked();
void onPushButton_add_Clicked();
void onPushButton_sub_Clicked();
void onPushButton_mul_Clicked();
void onPushButton_div_Clicked();
void onPushButton_equ_Clicked();
void onPushButton_clear_Clicked();
};
#endif // MAINWINDOW_H
- main.cpp不用动
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//w.setMouseTracking(true);
w.show();
return a.exec();
}
- mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*-------------连接各个按钮的信号和槽----------------*/
connect( ui->pushButton_0,SIGNAL(clicked()),this,SLOT(onPushButton_0_Clicked()));
connect( ui->pushButton_1,SIGNAL(clicked()),this,SLOT(onPushButton_1_Clicked()));
connect( ui->pushButton_2,SIGNAL(clicked()),this,SLOT(onPushButton_2_Clicked()));
connect( ui->pushButton_3,SIGNAL(clicked()),this,SLOT(onPushButton_3_Clicked()));
connect( ui->pushButton_4,SIGNAL(clicked()),this,SLOT(onPushButton_4_Clicked()));
connect( ui->pushButton_5,SIGNAL(clicked()),this,SLOT(onPushButton_5_Clicked()));
connect( ui->pushButton_6,SIGNAL(clicked()),this,SLOT(onPushButton_6_Clicked()));
connect( ui->pushButton_7,SIGNAL(clicked()),this,SLOT(onPushButton_7_Clicked()));
connect( ui->pushButton_8,SIGNAL(clicked()),this,SLOT(onPushButton_8_Clicked()));
connect( ui->pushButton_9,SIGNAL(clicked()),this,SLOT(onPushButton_9_Clicked()));
connect( ui->pushButton_clear,SIGNAL(clicked()),this,SLOT(onPushButton_clear_Clicked())); //清除
connect( ui->pushButton_equ,SIGNAL(clicked()),this,SLOT(onPushButton_equ_Clicked())); //出结果
connect( ui->pushButton_add,SIGNAL(clicked()),this,SLOT(onPushButton_add_Clicked())); //加
connect( ui->pushButton_sub,SIGNAL(clicked()),this,SLOT(onPushButton_sub_Clicked())); //减
connect( ui->pushButton_mul,SIGNAL(clicked()),this,SLOT(onPushButton_mul_Clicked())); //乘
connect( ui->pushButton_div,SIGNAL(clicked()),this,SLOT(onPushButton_div_Clicked())); //除
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onPushButton_0_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("0"); //用0覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"0"); //后缀一个字符串“0”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("0"); //用0覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"0"); //后缀一个字符串“0”
}
}
}
void MainWindow::onPushButton_1_Clicked(){
/*-----打印发送者---
QObject *obj = sender(); //获取发送者
QString name = obj->objectName(); //或qDebug(QPrintable(obj->objectName()));
qDebug(name); //或qDebug("%s",name);
----------------*/
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("1"); //用1覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"1"); //后缀一个字符串“1”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("1"); //用1覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"1"); //后缀一个字符串“1”
}
}
}
void MainWindow::onPushButton_2_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("2"); //用2覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"2"); //后缀一个字符串“2”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("2"); //用2覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"2"); //后缀一个字符串“1”
}
}
}
void MainWindow::onPushButton_3_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("3"); //用3覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"3"); //后缀一个字符串“3”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("3"); //用3覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"3"); //后缀一个字符串“3”
}
}
}
void MainWindow::onPushButton_4_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("4"); //用4覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"4"); //后缀一个字符串“4”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("4"); //用4覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"4"); //后缀一个字符串“4”
}
}
}
void MainWindow::onPushButton_5_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("5"); //用5覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"5"); //后缀一个字符串“5”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("5"); //用5覆盖0
}else{
ui->label_value2->setText(ui->label_value2->text()+"5"); //后缀一个字符串“5”
}
}
}
void MainWindow::onPushButton_6_Clicked(){
if(empty==1){ //仍在输入value1
if(ui->label_value1->text().toInt()==0){
ui->label_value1->setText("6"); //用6覆盖0
}else{
ui->label_value1->setText(ui->label_value1->text()+"6"); //后缀一个字符串“6”
}
}else if(empty==2){ //仍在输入value2
if(ui->label_value2->text().toInt()==0){
ui->label_value2->setText("6"); //用6覆盖0
}else{