QT5 实现简易科学计算器

您所在的位置:网站首页 qt开发环境编写计算器 QT5 实现简易科学计算器

QT5 实现简易科学计算器

2024-07-13 13:12| 来源: 网络整理| 查看: 265

QT5 实现简易科学计算器 界面展示功能叙述源码主界面源码mainwindow.hmainwindow.cpp 基础计算界面floatcanculator.hfloatcanculator.cppBeh.hppExpression.hppStack.hppFunction.hFunction.cpplegalexpression.hlegalexpression.cpp 矩阵计算界面matrixfunction.hmatrixfunction.cpp main

界面展示

主界面 基础科学计算器界面 矩阵计算界面

功能叙述

              \;\;\;\;\;\;\, 基础计算界面允许加减乘除表达式计算及嵌套,以及一部分基本初等函数的数值计算,基本初等函数不允许嵌套函数及表达式,这个是此计算器的缺点               \;\;\;\;\;\;\, 矩阵计算模块会实时根据行列输入生成对应表格,并给出行号和列号,并且第二个矩阵会根据第一个矩阵的行列自动创建,无需第二次输入行列数。缺点:作为右操作数的矩阵若不填满会导致程序异常终止,乘法的右操作数矩阵无法改变列数,时间仓促,待有时间进行修改

源码 主界面源码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include "matrixfunction.h" #include "floatcanculator.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void timerUpdate(void); signals: void showFloat(); private slots: void on_floatCanculate_clicked(); void on_MatrixCalculate_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); FloatCanculator backFloat; connect(&backFloat , SIGNAL(FloatToMain()) , this , SLOT(ReveiveFloat())); QTimer *timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate())); timer->start(1000); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_floatCanculate_clicked() { FloatCanculator jump; jump.exec(); } //void MainWindow::ReceiveFloat() //{ // this->show(); //} void MainWindow::timerUpdate(void) { QDateTime time = QDateTime::currentDateTime(); QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); ui->Time->setText(str); } void MainWindow::on_MatrixCalculate_clicked() { MatrixFunction jump; jump.exec(); } 基础计算界面 floatcanculator.h #ifndef FLOATCANCULATOR_H #define FLOATCANCULATOR_H #include #include #include #include #include #include "legalexpression.h" #include "Function.h" #include using namespace std; namespace Ui { class FloatCanculator; } class FloatCanculator : public QDialog { Q_OBJECT public: explicit FloatCanculator(QWidget *parent = nullptr); ~FloatCanculator(); public slots: void timerUpdate(void); private slots: void on_SinButton_clicked(); void on_CosButton_clicked(); void on_TanButton_clicked(); void on_lnButton_clicked(); void on_SevenButton_clicked(); void on_FourButton_clicked(); void on_OneButton_clicked(); void on_EightButton_clicked(); void on_FiveButton_clicked(); void on_TwoButton_clicked(); void on_ZeroButton_clicked(); void on_NineButton_clicked(); void on_SixButton_clicked(); void on_ThreeButton_clicked(); void on_DotButton_clicked(); void on_DivisionButton_clicked(); void on_MultiplyButton_clicked(); void on_SubtractionButton_clicked(); void on_PlusButton_clicked(); void on_EqualButton_clicked(); void on_ClearButton_clicked(); void on_RightBracketButton_clicked(); void on_LeftBrakerButton_clicked(); void on_ExpButton_clicked(); void on_DoubleZeroButton_clicked(); void on_BackUpButton_clicked(); void on_PowerButton_clicked(); void on_SqrtButton_clicked(); void on_LgButton_clicked(); void on_FactorialButton_clicked(); signals: void FloatToMain(); private: Ui::FloatCanculator *ui; QLabel *Time; QLabel *LabelExpression; enum FunctionSituation{EMPTY = 0,POWER,SQRT,LG,FAC,SIN,COS,TAN,LN,EXP,NUM}; int Flag; bool JudgeIllgalInput(); void moveCursor(); }; #endif // FLOATCANCULATOR_H floatcanculator.cpp #include "floatcanculator.h" #include "ui_floatcanculator.h" #include "mainwindow.h" #include "Beh.hpp" #include "Expression.hpp" #include "Stack.hpp" FloatCanculator::FloatCanculator(QWidget *parent) : QDialog(parent), ui(new Ui::FloatCanculator) { ui->setupUi(this); Time = new QLabel(this); LabelExpression = new QLabel(this); QTimer *timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate())); timer->start(1000); Flag = EMPTY; } FloatCanculator::~FloatCanculator() { delete ui; } void FloatCanculator::timerUpdate() { QDateTime time = QDateTime::currentDateTime(); QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); Time->setText(str); Time->setAlignment(Qt::AlignLeft); Time->setGeometry(0,0,580,80); QFont font; font.setItalic(true); font.setPixelSize(30); Time->setFont(font); Time->show(); } void FloatCanculator::on_SinButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("sin()"); if(JudgeIllgalInput()) { Flag = SIN; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_CosButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("cos()"); JudgeIllgalInput(); if(JudgeIllgalInput()) { Flag = COS; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_TanButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("tan()"); if(JudgeIllgalInput()) { Flag = TAN; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_lnButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("ln()"); if(JudgeIllgalInput()) { Flag = LN; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_SevenButton_clicked() { LabelExpression->clear(); ui->Display->insert("7"); } void FloatCanculator::on_FourButton_clicked() { LabelExpression->clear(); ui->Display->insert("4"); } void FloatCanculator::on_OneButton_clicked() { LabelExpression->clear(); ui->Display->insert("1"); } void FloatCanculator::on_EightButton_clicked() { LabelExpression->clear(); ui->Display->insert("8"); } void FloatCanculator::on_FiveButton_clicked() { LabelExpression->clear(); ui->Display->insert("5"); } void FloatCanculator::on_TwoButton_clicked() { LabelExpression->clear(); ui->Display->insert("2"); } void FloatCanculator::on_ZeroButton_clicked() { LabelExpression->clear(); ui->Display->insert("0"); } void FloatCanculator::on_NineButton_clicked() { LabelExpression->clear(); ui->Display->insert("9"); } void FloatCanculator::on_SixButton_clicked() { LabelExpression->clear(); ui->Display->insert("6"); } void FloatCanculator::on_ThreeButton_clicked() { LabelExpression->clear(); ui->Display->insert("3"); } void FloatCanculator::on_DotButton_clicked() { LabelExpression->clear(); ui->Display->insert("."); } void FloatCanculator::on_DivisionButton_clicked() { LabelExpression->clear(); ui->Display->insert("/"); } void FloatCanculator::on_MultiplyButton_clicked() { LabelExpression->clear(); ui->Display->insert("*"); } void FloatCanculator::on_SubtractionButton_clicked() { LabelExpression->clear(); ui->Display->insert("-"); } void FloatCanculator::on_PlusButton_clicked() { LabelExpression->clear(); ui->Display->insert("+"); } void FloatCanculator::on_EqualButton_clicked() { double Answer = 0; LabelExpression->clear(); // 按下等号获取当前QLineEdit中的字符串,并转化为string类型 QString QExpression = ui->Display->text(); string expressions = QExpression.toStdString(); // 判断表达式是否合法 LegalExpression Judger(expressions); if(Judger.isLegal()) { if(Flag != EMPTY) { // 在这里直接进入函数泰勒计算 // enum FunctionSituation{EMPTY = 0,POWER,SQRT,LG,FAC,SIN,COS,TAN,LN,EXP}; switch (Flag) { case POWER: { int Length = QExpression.length(); int position = QExpression.indexOf("∧"); QString QbaseNumber = QExpression; QbaseNumber.chop(Length - position); double baseNumber = QbaseNumber.toDouble(); QString QpowNumber = QExpression.mid(position+2); QpowNumber.chop(1); double powNumber = QpowNumber.toDouble(); Answer = getPow(baseNumber , powNumber); break; } case SQRT: { QString Qnumber = QExpression.mid(2); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getSqrt(number); break; } case LG: { QString Qnumber = QExpression.mid(3); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getLg(number); break; } case FAC: { QString Qnumber = QExpression; Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getFac(number); break; } case SIN: { QString Qnumber = QExpression.mid(4); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getSin(number); break; } case COS: { QString Qnumber = QExpression.mid(4); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getCos(number); break; } case TAN: { QString Qnumber = QExpression.mid(4); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getTan(number); break; } case LN: { QString Qnumber = QExpression.mid(3); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getLn(number); break; } case EXP: { QString Qnumber = QExpression.mid(4); Qnumber.chop(1); double number = Qnumber.toDouble(); Answer = getExp(number); break; } default: break; } } else { //接口留在这里,串联后端构建表达式以及输出表达式Q expressions += "#"; Expression *get = strToTree( expressions ); ui->Display->clear(); Answer = getResult( get ); // 用这个参数接返回的计算值 } QString QAnswer = QString::number(Answer , 10 , 6); ui->Display->setText(QAnswer); LabelExpression->setText(QExpression); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } else { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } } void FloatCanculator::on_ClearButton_clicked() { LabelExpression->clear(); ui->Display->clear(); Flag = EMPTY; ui->Display->setEnabled(true); } void FloatCanculator::on_RightBracketButton_clicked() { LabelExpression->clear(); ui->Display->insert("("); JudgeIllgalInput(); Flag = NUM; } void FloatCanculator::on_LeftBrakerButton_clicked() { LabelExpression->clear(); ui->Display->insert(")"); Flag = NUM; } bool FloatCanculator::JudgeIllgalInput() { bool ReturnJudge = true; QString expression = ui->Display->text(); string stdExpression = expression.toStdString(); //接口 //返回值 LegalExpression Judger(stdExpression); ReturnJudge = Judger.isLegal(); if(!ReturnJudge) { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } return ReturnJudge; } void FloatCanculator::moveCursor() { QString text = ui->Display->text(); int position = text.indexOf(")"); if(position != -1) ui->Display->setCursorPosition(position); } void FloatCanculator::on_ExpButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("exp()"); if(JudgeIllgalInput()) { Flag = EXP; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_DoubleZeroButton_clicked() { LabelExpression->clear(); ui->Display->insert("00"); JudgeIllgalInput(); Flag = NUM; } void FloatCanculator::on_BackUpButton_clicked() { QString text; text = ui->Display->text(); int Length = text.length(); text = text.mid(0,Length-1); ui->Display->setText(text); LabelExpression->clear(); if(Flag != NUM) Flag = EMPTY; ui->Display->setEnabled(true); } void FloatCanculator::on_PowerButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("∧()"); QString text; text = ui->Display->text(); QString preString = text; preString.chop(3); bool isNumber = true; double tempTest = preString.toDouble(&isNumber); if(!isNumber) { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } else { Flag = POWER; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_SqrtButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("√()"); QString text = ui->Display->text(); if(text.at(0) != "√") { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } else { Flag = SQRT; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_LgButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("lg()"); QString text = ui->Display->text(); if(text.at(1) != "g") { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } else { Flag = LG; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } void FloatCanculator::on_FactorialButton_clicked() { if(Flag != EMPTY) return; LabelExpression->clear(); ui->Display->insert("!"); QString text = ui->Display->text(); QString preString = text; preString.chop(1); bool isNumber = true; double temp = preString.toDouble(&isNumber); if(!isNumber) { LabelExpression->setText("错误计算格式,请修改"); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } else { Flag = FAC; moveCursor(); ui->Display->setFocusPolicy(Qt::NoFocus); } } Beh.hpp #pragma once #define _BEH_HPP_ #include #include #include #include "Stack.hpp" #include "Expression.hpp" double strToDouble( std::string str, int n ) { double ret = 0.0; int dotMarker = 0; for ( int i = 0; i value = value; } private: double value; }; class Operator : public Expression { // 运算符类 friend double getResult( Expression* ptr ); friend void OutputInorder( Expression* out ); public: Operator( Expression* theLeftChild, Expression* theRightChild, char Type ) { leftChild = theLeftChild; rightChild = theRightChild; type = Type; } // 基类的指针实现多态 private: char type; }; double getResult( Expression* ptr ) { // 对二叉树后序遍历 double leftResult = 0, rightResult=0; if ( ptr ->leftChild ) leftResult = getResult(ptr ->leftChild); else return ((Operand*)ptr) ->value; if ( ptr ->rightChild ) rightResult = getResult(ptr ->rightChild); else return ((Operand*)ptr) ->value; switch ( ((Operator*)ptr) ->type ) { case '+': return leftResult + rightResult; case '-': return leftResult - rightResult; case '*': return leftResult * rightResult; case '/': return leftResult / rightResult; } return 0; } void OutputInorder( Expression* out ) { if ( out ->leftChild ) OutputInorder(out ->leftChild); else printf("%lf", ((Operand*)out) ->value); printf("%c", ((Operator*)out) ->type); if ( out ->rightChild ) OutputInorder(out ->rightChild); else printf("%lf", ((Operand*)out) ->value); } Stack.hpp #pragma once #define _STACK_HPP_ #include #include enum State { ERROR, COMPLETE }; #define MAX_SIZE 100 template struct Stack { T dataStorage[MAX_SIZE]; int topPtr = -1; }; template int GetTopPtr( Stack* ptr ) { return ptr ->topPtr; } template bool isFull( Stack* ptr ) { bool ret = false; if ( MAX_SIZE - 1 == ptr ->topPtr ) ret = true; return ret; } template bool isEmpty( Stack* ptr ) { bool ret = false; if ( -1 == ptr ->topPtr ) ret = true; return ret; } template State PushIntoStack( Stack* ptr, T item ) { if ( MAX_SIZE - 1 == ptr ->topPtr ) { return State::ERROR; } else { (ptr ->dataStorage)[++ptr ->topPtr] = item; return State::COMPLETE; } } template State PopFromStack( Stack* ptr, T* item ) { if ( -1 == ptr ->topPtr ) { return State::ERROR; } else { ptr ->topPtr --; *item = (ptr ->dataStorage)[ptr ->topPtr + 1]; return State::COMPLETE; } } template T DisplayTopItem( Stack* ptr ) { return (ptr ->dataStorage)[ptr ->topPtr]; } Function.h #ifndef FUNCTION_H #define FUNCTION_H #include #include #include using namespace std; double getSin(double number); double getCos(double number); double getTan(double number); double getLn(double number); double getExp(double number); double getPow(double baseNumber , double powNumber); double getSqrt(double number); double getLg(double number); double getFac(double number); #endif // FUNCTION_H Function.cpp #include "Function.h" double getSin(double number) { double answer = 0; // 弧度 double radian = (number * 3.1415926) / 180.0; answer = sin(radian); return answer; } double getCos(double number) { double answer = 0; // 弧度 double radian = (number * 3.1415926) / 180.0; answer = cos(radian); return answer; } double getTan(double number) { double answer = 0; // 弧度 double radian = (number * 3.1415926) / 180.0; answer = tan(radian); return answer; } double getLn(double number) { double answer = 0; answer = log(number); return answer; } double getExp(double number) { double answer = 0; answer = exp(number); return answer; } double getSqrt(double number) { double answer = 0; answer = sqrt(number); return answer; } double getLg(double number) { double answer = 0; answer = log10(number); return answer; } double getFac(double number) { double answer = 1; for (double i = 2; i expression = expression; c_expression = this->expression.c_str(); // 初始化栈 stack.basePointer = (char*)malloc(sizeof(char) * INIT_STACK_SIZE); if (!stack.basePointer) exit(OVERFLOW); stack.topPointer = stack.basePointer; stack.stackSize = INIT_STACK_SIZE; } LegalExpression::~LegalExpression() { stack.topPointer = NULL; delete[] stack.basePointer; } bool LegalExpression::isLegal() { bool ReturnJudge = true; int Length = expression.length(); // 0为无操作正在等待,1为有特殊操作等待 int Flag = 0; for (int i = 0; i = 'a' && c_expression[i] = 'a' && c_expression[i] setupUi(this); Time = new QLabel(this); LabelExpression = new QLabel(this); timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate())); timer->start(1000); readTimer = new QTimer(this); connect(readTimer , SIGNAL(timeout()) , this , SLOT(makeTable())); readTimer->start(1000); for(int i = 0 ; i setAlignment(Qt::AlignLeft); Time->setGeometry(0,0,580,80); QFont font; font.setItalic(true); font.setPixelSize(30); Time->setFont(font); Time->show(); } void MatrixFunction::makeTable() { LabelExpression->clear(); int Row , Column; bool judgeRow = true , judgeColumn = true; Row = ui->RowMatrix->text().toInt(&judgeRow); Column = ui->ColumnMatrix->text().toInt(&judgeColumn); if(judgeRow && judgeColumn) { ui->Display->verticalHeader()->hide(); ui->Display->horizontalHeader()->hide(); ui->Display->setRowCount(Row+1); ui->Display->setColumnCount(Column+1); for(int i = 0 ; i Display->setItem(i+1,0,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setItem(0,i+1,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setRowHeight(i,50); for(int i = 0 ; i Display->setColumnWidth(i,50); } else if(ui->RowMatrix->text() == NULL && ui->ColumnMatrix->text() == NULL) { } else { ui->Display->clear(); setWrongLabel("错误行列数目格式,请修改"); } } void MatrixFunction::setWrongLabel(QString message) { LabelExpression->setText(message); LabelExpression->setAlignment(Qt::AlignRight); LabelExpression->setGeometry(581 , 0 , 580 , 80); QFont font; font.setPixelSize(30); LabelExpression->setFont(font); LabelExpression->show(); } void MatrixFunction::MatrixFunction::getAdd() { for(int i = 0 ; i item(i,j)->text() == "") { Judge = false; break; } else left.value[i-1][j-1] = ui->Display->item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { left.row = row-1; left.column = column-1; ui->Display->clear(); makeTable(); ui->RowMatrix->clear(); ui->ColumnMatrix->clear(); Flag = PLUS; } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } } void MatrixFunction::on_SubstractButton_clicked() { readTimer->stop(); int row = ui->RowMatrix->text().toInt(); int column = ui->ColumnMatrix->text().toInt(); bool Judge = true; for(int i = 1 ; i item(i,j) == NULL || ui->Display->item(i,j)->text() == "") { Judge = false; break; } else left.value[i-1][j-1] = ui->Display->item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { left.row = row-1; left.column = column-1; ui->Display->clear(); makeTable(); ui->RowMatrix->clear(); ui->ColumnMatrix->clear(); Flag = SUB; } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } } void MatrixFunction::on_MultiplyButton_clicked() { readTimer->stop(); int row = ui->RowMatrix->text().toInt(); int column = ui->ColumnMatrix->text().toInt(); bool Judge = true; for(int i = 1 ; i item(i,j) == NULL || ui->Display->item(i,j)->text() == "") { Judge = false; break; } else left.value[i-1][j-1] = ui->Display->item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { left.row = row-1; left.column = column-1; ui->Display->clear(); LabelExpression->clear(); int Row , Column; Column = ui->RowMatrix->text().toInt(); Row = ui->ColumnMatrix->text().toInt(); ui->Display->verticalHeader()->hide(); ui->Display->horizontalHeader()->hide(); ui->Display->setRowCount(Row+1); ui->Display->setColumnCount(Column+1); for(int i = 0 ; i Display->setItem(i+1,0,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setItem(0,i+1,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setRowHeight(i,50); for(int i = 0 ; i Display->setColumnWidth(i,50); Flag = MUL; } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } } void MatrixFunction::on_ClearButton_clicked() { ui->Display->clear(); ui->RowMatrix->clear(); ui->ColumnMatrix->clear(); for(int i = 0 ; i item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { right.row = left.row; right.column = right.row; //在这里执行加法操作,结构体看.h文件,在public里面,返回值赋值给answer answer.row = left.row; answer.column = left.column; getAdd(); } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } break; } case MUL: { row = left.column+1; column = left.row+1; for(int i = 1 ; i item(i,j) == NULL || ui->Display->item(i,j)->text() == "") { Judge = false; break; } right.value[i-1][j-1] = ui->Display->item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { right.row = row; right.column = column; //在这里执行乘法操作,结构体看.h文件,在public里面,返回值赋值给answer answer.row = left.row; answer.column = left.row; getMul(); } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } break; } case SUB: { row = left.row+1; column = left.column+1; for(int i = 1 ; i item(i,j) == NULL || ui->Display->item(i,j)->text() == "") { Judge = false; break; } right.value[i-1][j-1] = ui->Display->item(i,j)->text().toDouble(); } if(!Judge) break; } if(Judge) { right.row = row; right.column = column; //在这里执行减法操作,结构体看.h文件,在public里面,返回值赋值给answer answer.row = left.row; answer.column = left.column; getSub(); } else { setWrongLabel("矩阵未写满,请填满后点击操作符"); } break; } default: break; } ui->Display->clear(); row = answer.row+1; column = answer.column+1; ui->Display->verticalHeader()->hide(); ui->Display->horizontalHeader()->hide(); ui->Display->setRowCount(row+1); ui->Display->setColumnCount(column+1); for(int i = 0 ; i Display->setItem(i+1,0,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setItem(0,i+1,new QTableWidgetItem(QString::number(i+1 , 10))); } for(int i = 0 ; i Display->setRowHeight(i,50); for(int i = 0 ; i Display->setColumnWidth(i,50); for(int i = 0 ; i setItem(i+1,j+1,new QTableWidgetItem(QString::number(answer.value[i][j]))); } } readTimer->start(); } main #include "mainwindow.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3