当前位置: 首页 > news >正文

0924-25,QT的数据类型,实现一个井字棋和计算器(只输入)

目录

day-01

24作业:

01 说明一下Qt生成的项目模板中有哪些文件和文件夹,分别有什么作用?

02 Qt Creator中有哪几个模式,切换的快捷键是什么?

03 如何查看某个Qt内置类的帮助文档,如何查看某个类的源代码?QApplication的继承体系是怎么样的?

04 根据如下ui绘制一个计算器,先不实现计算的功能,只实现显示表达式和编辑表达式的功能

mainwindow.h

main.cpp

mainwindow.cpp

05 QString和std::string和char数组有什么区别?QString增删改查用什么成员函数?

25作业:

01 书写一个函数MyIntersection,可以支持两个相同的QList或者QSet的取交集的操作,返回新集合。书写一个函数MyOdd,可以将一个QMap的所有奇数的键或者是值搜集起来,返回新QList。,int>

02 给出一个路径'/usr/include/dir1/dir2':

03 实现一个井字棋 点击空白按钮可以显示'X'或者'O' 

井字棋答案

mainwindow.h

mainwindow.cc

计算器答案

mainwindow.h

mainwindow.cc

day-01

#include "mainwindow.h"#include <stdio.h>
#include <iostream>
#include <QApplication>
#include <QDebug>
#include <QPoint>
#include <QLine>int main(int argc, char *argv[])
{QApplication a(argc, argv);
//    MainWindow w;
//    w.show();QPoint point(100,200);QPoint p(100,200);qDebug()<<point;QLine l(300,300,100,200);QLine l1(point,p);qDebug()<<l<<l1;char aaa[]="hello 中国";std::string str="hello 中国";  //会被放到最后输出QString qs="hello 中国"; //构造函数进行了编码转换,不适合进行消息传输std::cout<<aaa<<std::endl;std::cout<<str<<std::endl;qDebug()<<qs;//写时复制QString qs1(qs);qDebug()<<"qs data = "<<qs.data_ptr();qDebug()<<"qs data = "<<qs1.data_ptr();qs1[0]='H';qDebug()<<"qs data = "<<qs.data_ptr();qDebug()<<"qs data = "<<qs1.data_ptr();std::string s1="xixi";QString q1=QString::fromStdString(s1);qDebug()<<q1;//格式化构造QString kobe("i am %1 my number is %2 ,second number is %3");qDebug()<<kobe.arg("kobe");qDebug()<<kobe.arg("kobe").arg(8);qDebug()<<kobe.arg("kobe").arg(8).arg(24.3);qDebug()<<kobe;//arg int -QStringint i=1342;QString qi;qi=QString("%1").arg(i,-15,2,QChar('-'));//int a 数字  filewidth最大有效长度/负数左对齐  base进制  fillChar填充//inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const//{ return arg(qlonglong(a), fieldWidth, base, fillChar); }qDebug()<<qi;//QString->doubleQString pie="3.12435342534";bool ok;double pied=pie.toDouble(&ok);qDebug()<<"pied=  "<<pied<<"  ok="<<ok;return a.exec();
}

24作业:

01 说明一下Qt生成的项目模板中有哪些文件和文件夹,分别有什么作用?

1,pro文件,作用类似于makefile,给qmake使用

   里面定义了模块,C++文件,库文件,ui文件

2,mainwindow,h  mainwindow.cpp   主窗口的声明和实现,包括UI元素和信号槽的实现

3,main.cpp  程序的入口函数,包括两个对象,QApplication(事件循环)和MainWindow(主窗口),主窗口包括三个要素,QMainWindow(父类)UI::MainWindow的指针(由UI文件生成的)和其他自定义的数据成员

5,mainwindow.ui  ,ui文件,本质是XML文件,一般用设计者模式编辑

02 Qt Creator中有哪几个模式,切换的快捷键是什么?

ctrl + 1~6

03 如何查看某个Qt内置类的帮助文档,如何查看某个类的源代码?QApplication的继承体系是怎么样的?

Qt内置类的帮助文档  f1

查看某个类的源代码  f2

QApplication的继承体系: 

class  QApplication : public QGuiApplication
class MainWindow : public QMainWindow

04 根据如下ui绘制一个计算器,先不实现计算的功能,只实现显示表达式和编辑表达式的功能

QString的append方法可以追加一个字符

https://raw.githubusercontent.com/liaozhengsong/cpp_picture/main/20240530180746.png

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void do_button_clicked();void on_pushButton_0_clicked();void on_pushButton_1_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_9_clicked();void on_pushButton_jia_clicked();void on_pushButton_c_clicked();void on_pushButton_chu_clicked();void on_pushButton_cheng_clicked();void on_pushButton_del_clicked();void on_pushButton_jian_clicked();void on_pushButton_dian_clicked();void on_pushButton_deng_clicked();void on_pushButton_010_clicked();private:Ui::MainWindow *ui;QPushButton *button;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//自己添加的代码必须写在这个函数后面button=new QPushButton("hello",this);QObject::connect(button,SIGNAL(clicked()),this,SLOT(do_button_clicked()));//发送方   //信号         //接收方    //信号槽//注意:转到槽不要调用connect(会调用两次),必须在接收方和发送方都构建之后使用}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::do_button_clicked(){QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("HELLO");}else{ui->label->setText("WORLD");}
}void MainWindow::on_pushButton_0_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText(" ");}else{text.append("0");ui->label->setText(text);}
}
void MainWindow::on_pushButton_1_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("1");}else{text.append("1");ui->label->setText(text);}
}
void MainWindow::on_pushButton_2_clicked()
{QString text=ui->label-> text();if(text=="hello"){ui->label->setText("2");}else{text.append("2");ui->label->setText(text);}
}
void MainWindow::on_pushButton_3_clicked()
{QString text=ui->label-> text();if(text=="hello"){text.append("3");ui->label->setText("3");}else{text.append("3");ui->label->setText(text);}
}
void MainWindow::on_pushButton_4_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("4");}else{text.append("4");ui->label->setText(text);}
}
void MainWindow::on_pushButton_5_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("5");}else{text.append("5");ui->label->setText(text);}
}
void MainWindow::on_pushButton_6_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("6");}else{text.append("6");ui->label->setText(text);}
}
void MainWindow::on_pushButton_7_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("7");}else{text.append("7");ui->label->setText(text);}
}
void MainWindow::on_pushButton_8_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("8");}else{text.append("8");ui->label->setText(text);}
}
void MainWindow::on_pushButton_9_clicked()
{QString text=ui->label-> text();if(text=="hello"||text==""){ui->label->setText("9");}else{text.append("9");ui->label->setText(text);}
}//c  清空
void MainWindow::on_pushButton_c_clicked()
{ui->label->setText(" ");
}void MainWindow::on_pushButton_chu_clicked()
{QString text=ui->label-> text();//非空且最后字符是1if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append("/");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_cheng_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append("*");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_del_clicked()
{QString text=ui->label-> text();//非空if(!text.isEmpty()){text.chop(1);ui->label->setText(text);}
}void MainWindow::on_pushButton_jian_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append("-");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_jia_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append("+");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_010_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append("%");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_dian_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){text.append(".");ui->label->setText(text);}else{//不变化ui->label->setText(text);}
}void MainWindow::on_pushButton_deng_clicked()
{QString text=ui->label-> text();if(!text.isEmpty()&&text[text.length()-1].isDigit()){ui->label->setText("result is ...");}//if最后一位是数字,输出  //不是数字,报错}

05 QString和std::string和char数组有什么区别?QString增删改查用什么成员函数?

char数组是结尾字符为‘\0’的字符数组,每个字符都占一个字节,底层编码是ASCII码

std::string是stl的模板容器,处理 ASCII 或 UTF-8 编码的字符串

QString是qt的字符串类,底层的编码方式为utl-16

25作业:

01 书写一个函数MyIntersection,可以支持两个相同的QList或者QSet的取交集的操作,返回新集合。书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。

#include "mainwindow.h"#include <QApplication>
#include <QDebug>
#include <QList>
#include <QSet>//QList--std::deque QSet--std::unordered set(非序列式容器,哈希,不能重复)//书写一个函数MyIntersection,可以支持两个相同的QList或者QSet的取交集的操作,返回新集合。
template <typename T>
QSet<T>  MyIntersection (const QSet<T> & t1,const QSet<T> & t2){//新建容器//遍历t1(遍历t2,相同的元素加入新容器)QSet<T> newset;for(const auto & ele : t1){auto temp=t2.find(ele);if(temp!=t2.end()){newset.insert(ele);}}return newset;
}
template <typename T>
QList<T>  MyIntersection (const QList<T> & t1,const QList<T> & t2){//新建容器//遍历t1(遍历t2,相同的元素加入新容器)QSet<T> newset;for(int i=0;i<t1.count();++i){for(int j=0;j<t2.count();++j){if(t1[i]==t2[j]){newset.insert(t1[i]);}}}return QList<T>(newset.begin(),newset.end());
}//书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。
QList<int> MyOdd(const QMap<int,int> & m1){QSet<int> s1;for(auto & ele:m1.keys()){if(ele&1){s1.insert(ele);}if(m1.value(ele)&1){s1.insert(m1.value(ele));}}return QList<int>(s1.begin(),s1.end());
}int main(int argc, char *argv[])
{QApplication a(argc, argv);//MainWindow w;//w.show();//QList--std::deque QSet--std::unordered set(非序列式容器,哈希,不能重复)QList<int> l1{1,4,3,2,5,7,8,3,2,245};QList<int> l2{3,7,3,3,2,2,5,7};QList<int> ll=MyIntersection(l1,l2);qDebug()<<ll;QSet<int> s1{1,4,3,2,5,7,8,3,2,245};QSet<int> s2{3,7,3,3,2,2,5,7};QSet<int> ss=MyIntersection(s1,s2);qDebug()<<ss;//书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。QMap<int,int> m1{{3,2},{4,5},{0,9},{1,3}};QList<int> lm1=MyOdd(m1);qDebug()<<lm1;return a.exec();
}

02 给出一个路径'/usr/include/dir1/dir2':

  • 将路径切割并存入一个栈中。
  • 实现cd 子目录和cd 上一级功能,返回路径的字符串。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QStack>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();QStack<QString>  creater(QString  s1);private slots:void on_pushButton_cd_clicked();void on_pushButton_cdfront_clicked();private:Ui::MainWindow *ui;QStack<QString> s1;};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QString ss1("/usr/include/dir1/dir2");s1=creater(ss1);
}MainWindow::~MainWindow()
{delete ui;
}QStack<QString>  MainWindow::creater(QString  s1){QStack<QString> mys;QStringList lisarr=s1.split("/",QString::SkipEmptyParts);for(int i=0;i<lisarr.size();++i){mys.push(lisarr[i]);}return mys;}//给出一个路径'/usr/include/dir1/dir2':
//将路径切割并存入一个栈中。
//实现cd 子目录和cd 上一级功能,返回路径的字符串void MainWindow::on_pushButton_cd_clicked()
{
//打开子目录-->/uer  只有一个/  for()QString txt=ui->index_1->toPlainText();int index1=txt.count('/');QString t;if(index1<=3){for(int i=0;i<index1+1;++i){//  /uer->/usr/includet.append('/').append(s1.at(i));}ui->index_1->setText(t);}else{for(int i=0;i<4;++i){t.append('/').append(s1.at(i));}ui->index_1->setText(t);}}void MainWindow::on_pushButton_cdfront_clicked()
{QString txt=ui->index_1->toPlainText();int index1=txt.count('/');QString t;if(index1<=4){for(int i=0;i<index1-1;++i){t.append('/').append(s1.at(i));}ui->index_1->setText(t);}else{for(int i=0;i<4;++i){t.append('/').append(s1.at(i));}ui->index_1->setText(t);}
}

03 实现一个井字棋 点击空白按钮可以显示'X'或者'O' 

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_12_clicked()
{QString txt=ui->pushButton_12->text();if(txt.isEmpty()){ui->pushButton_12->setText("X");}else if(txt=="X"){ui->pushButton_12->setText("O");}else{ui->pushButton_12->setText("");}}void MainWindow::on_pushButton_18_clicked()
{QString txt=ui->pushButton_18->text();if(txt.isEmpty()){ui->pushButton_18->setText("X");}else if(txt=="X"){ui->pushButton_18->setText("O");}else{ui->pushButton_18->setText("");}
}void MainWindow::on_pushButton_13_clicked()
{QString txt=ui->pushButton_13->text();if(txt.isEmpty()){ui->pushButton_13->setText("X");}else if(txt=="X"){ui->pushButton_13->setText("O");}else{ui->pushButton_13->setText("");}
}void MainWindow::on_pushButton_11_clicked()
{QString txt=ui->pushButton_11->text();if(txt.isEmpty()){ui->pushButton_11->setText("X");}else if(txt=="X"){ui->pushButton_11->setText("O");}else{ui->pushButton_11->setText("");}
}void MainWindow::on_pushButton_10_clicked()
{QString txt=ui->pushButton_10->text();if(txt.isEmpty()){ui->pushButton_10->setText("X");}else if(txt=="X"){ui->pushButton_10->setText("O");}else{ui->pushButton_10->setText("");}
}void MainWindow::on_pushButton_14_clicked()
{QString txt=ui->pushButton_14->text();if(txt.isEmpty()){ui->pushButton_14->setText("X");}else if(txt=="X"){ui->pushButton_14->setText("O");}else{ui->pushButton_14->setText("");}
}void MainWindow::on_pushButton_17_clicked()
{QString txt=ui->pushButton_17->text();if(txt.isEmpty()){ui->pushButton_17->setText("X");}else if(txt=="X"){ui->pushButton_17->setText("O");}else{ui->pushButton_17->setText("");}
}void MainWindow::on_pushButton_15_clicked()
{QString txt=ui->pushButton_15->text();if(txt.isEmpty()){ui->pushButton_15->setText("X");}else if(txt=="X"){ui->pushButton_15->setText("O");}else{ui->pushButton_15->setText("");}
}void MainWindow::on_pushButton_16_clicked()
{QString txt=ui->pushButton_16->text();if(txt.isEmpty()){ui->pushButton_16->setText("X");}else if(txt=="X"){ui->pushButton_16->setText("O");}else{ui->pushButton_16->setText("");}
}void MainWindow::on_pushButton_clear_clicked()
{ui->pushButton_16->setText("");ui->pushButton_15->setText("");ui->pushButton_17->setText("");ui->pushButton_12->setText("");ui->pushButton_18->setText("");ui->pushButton_13->setText("");ui->pushButton_11->setText("");ui->pushButton_10->setText("");ui->pushButton_14->setText("");
}

井字棋答案

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QtWidgets/QtWidgets>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_1_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_9_clicked();void on_clearBtn_clicked();//清屏 void on_undoBtn_clicked();//回退 private:Ui::MainWindow *ui;QList<QPushButton *> buttonList;//QPushButton  按钮deque QStack<int> opStack; //操作栈 -->回退 QString currentUser; //当前内容 
};
#endif // MAINWINDOW_H

mainwindow.cc

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);buttonList << ui->pushButton_1<< ui->pushButton_2<< ui->pushButton_3<< ui->pushButton_4<< ui->pushButton_5<< ui->pushButton_6<< ui->pushButton_7<< ui->pushButton_8<< ui->pushButton_9;//链式调用 on_clearBtn_clicked();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_1_clicked()
{//检查按钮内容是否为空,不为空,返回不执行下面的操作//避免反悔 if(!ui->pushButton_1->text().isEmpty()){return;}ui->pushButton_1->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(0);//stack.push 压栈 
}
void MainWindow::on_pushButton_2_clicked()
{if(!ui->pushButton_2->text().isEmpty()){return;}ui->pushButton_2->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(1);
}
void MainWindow::on_pushButton_3_clicked()
{if(!ui->pushButton_3->text().isEmpty()){return;}ui->pushButton_3->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(2);
}
void MainWindow::on_pushButton_4_clicked()
{if(!ui->pushButton_4->text().isEmpty()){return;}ui->pushButton_4->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(3);
}
void MainWindow::on_pushButton_5_clicked()
{if(!ui->pushButton_5->text().isEmpty()){return;}ui->pushButton_5->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(4);
}
void MainWindow::on_pushButton_6_clicked()
{if(!ui->pushButton_6->text().isEmpty()){return;}ui->pushButton_6->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(5);
}
void MainWindow::on_pushButton_7_clicked()
{if(!ui->pushButton_7->text().isEmpty()){return;}ui->pushButton_7->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(6);
}
void MainWindow::on_pushButton_8_clicked()
{if(!ui->pushButton_8->text().isEmpty()){return;}ui->pushButton_8->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(7);
}
void MainWindow::on_pushButton_9_clicked()
{if(!ui->pushButton_9->text().isEmpty()){return;}ui->pushButton_9->setText(currentUser);if(currentUser == "O"){currentUser = "X";}else{currentUser = "O";}opStack.push(8);
}
void MainWindow::on_clearBtn_clicked()
{for(int i = 0; i < buttonList.size(); ++i){buttonList[i]->setText("");}currentUser = "O";opStack.clear();
}void MainWindow::on_undoBtn_clicked()
{if(opStack.empty()){return;}int top = opStack.top();opStack.pop();buttonList[top]->setText("");if(currentUser == "O"){  //切换当前用户-->正确的玩家 currentUser = "X";}else{currentUser = "O";}
}

计算器答案

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QString>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btn1_clicked();void on_btn2_clicked();void on_btn3_clicked();void on_btn4_clicked();void on_btn5_clicked();void on_btn6_clicked();void on_btn7_clicked();void on_btn8_clicked();void on_btn9_clicked();void on_btn0_clicked();void on_btnplus_clicked();void on_btnminus_clicked();void on_btnmultiply_clicked();void on_btndivide_clicked();void on_btndel_clicked();
private:Ui::MainWindow *ui;QString _current_expression; // 褰撳墠鐨勮〃杈惧紡鍐呭bool _is_expression_valid; // 鏄惁瀛樺湪宸茬粡杈撳叆鐨勮〃杈惧紡void _check_and_clear(); // 妫€鏌ヨ〃杈惧紡锛岃嫢鏃犲凡杈撳叆鍐呭鍒欐竻绌?bool _check_operator_valid(); //妫€鏌ユ槸鍚﹀彲浠ヨ緭鍏ヨ繍绠楃
//    QString current expression; //当前的表达式内容
//	bool is expression valid; //是否存在已经输入的表达式
//	void check and clear0; // 检查表达式,若无已输入内容则清空
//	bool check operator valid0; //检查是否可以输入运算符
};
#endif // MAINWINDOW_H

mainwindow.cc

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow),_current_expression("please input..."),_is_expression_valid(false)
{ui->setupUi(this);ui->label->setText(_current_expression);
}MainWindow::~MainWindow()
{delete ui;
}
void MainWindow::_check_and_clear(){if(!_is_expression_valid){_current_expression.clear();_is_expression_valid = true;}
}
bool MainWindow::_check_operator_valid(){if(_is_expression_valid && _current_expression.back().isNumber()){return true;}return false;
}
void MainWindow::on_btn1_clicked()
{_check_and_clear();_current_expression.append("1");ui->label->setText(_current_expression);
}
void MainWindow::on_btn2_clicked()
{_check_and_clear();_current_expression.append("2");ui->label->setText(_current_expression);
}
void MainWindow::on_btn3_clicked()
{_check_and_clear();_current_expression.append("3");ui->label->setText(_current_expression);
}
void MainWindow::on_btn4_clicked()
{_check_and_clear();_current_expression.append("4");ui->label->setText(_current_expression);
}
void MainWindow::on_btn5_clicked()
{_check_and_clear();_current_expression.append("5");ui->label->setText(_current_expression);
}
void MainWindow::on_btn6_clicked()
{_check_and_clear();_current_expression.append("6");ui->label->setText(_current_expression);
}
void MainWindow::on_btn7_clicked()
{_check_and_clear();_current_expression.append("7");ui->label->setText(_current_expression);
}
void MainWindow::on_btn8_clicked()
{_check_and_clear();_current_expression.append("8");ui->label->setText(_current_expression);
}
void MainWindow::on_btn9_clicked()
{_check_and_clear();_current_expression.append("9");ui->label->setText(_current_expression);
}
void MainWindow::on_btn0_clicked()
{_check_and_clear();_current_expression.append("0");ui->label->setText(_current_expression);
}
void MainWindow::on_btnplus_clicked()
{if(_check_operator_valid()){_current_expression.append("+");ui->label->setText(_current_expression);}
}void MainWindow::on_btnminus_clicked()
{if(_check_operator_valid()){_current_expression.append("-");ui->label->setText(_current_expression);}
}void MainWindow::on_btnmultiply_clicked()
{if(_check_operator_valid()){_current_expression.append("*");ui->label->setText(_current_expression);}
}void MainWindow::on_btndivide_clicked()
{if(_check_operator_valid()){_current_expression.append("/");ui->label->setText(_current_expression);}
}void MainWindow::on_btndel_clicked()
{if(_is_expression_valid){_current_expression.chop(1);if(_current_expression.size() == 0){_is_expression_valid = false;_current_expression = "please input...";}ui->label->setText(_current_expression);}
}


http://www.mrgr.cn/news/39283.html

相关文章:

  • 解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题
  • OpenFeign学习
  • 4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
  • 双指针---(部分地更新)
  • next 从入门到精通
  • 项目集成SpringSecurity框架
  • YAPF,一个超强大的Python库
  • ​一篇关于BootRom的概念性文章。
  • 王道-操作系统
  • 内存泄漏和内存溢出简述
  • 基于单片机的可调式中文电子日历系统
  • STM32+ADC+扫描模式
  • 技术速递|Python in Visual Studio Code 2024年9月发布
  • 数仓建模:DataX同步Mysql数据到Hive如何批量生成建表语句?| 基于SQL实现
  • 二分查找详解(Java版)
  • 【Linux】Docker下载与使用-nginx
  • 【在Linux世界中追寻伟大的One Piece】命名管道
  • 基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)
  • 使用USB Network Gate借用远程USB设备
  • .lcrypt勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复