阿里巴巴做轮播网站,国美网站建设的特点,word素材库,歪咪小麻花官方网站怎么做零售目录
1 界面设计
2 思路简介
3 代码
目录
1 界面设计
2 思路简介
3 代码
3.1 widget.h
3.2 widget.c
4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作#xff0c;能实现简单的计算器功能。 1 界…目录
1 界面设计
2 思路简介
3 代码
目录
1 界面设计
2 思路简介
3 代码
3.1 widget.h
3.2 widget.c
4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作能实现简单的计算器功能。 1 界面设计
该计算器的界面设计如下所示
2 思路简介 1. 中缀表达式的构建 将按键输入字符转换为字符串的形式。 比如中缀表达式3234(6-3*5); 那么可以定义一个字符数组char Chars[1024];存储之后使用QString::fromUtf8(this-Chars);将该字符数组转换为LineEdit可以显示的类型。 2. 中缀表达式转变为后缀表达式 直接按照字符将中缀转变为后缀表达式在进行计算时再转换为数据和符号。这里在将中缀表达式转变为后缀表达式时把每个数都使用进行分割方便后续计算。比如3221转换为后缀表达式就是3221。 3. 使用后缀表达式进行计算
3 代码
3.1 widget.h
#ifndef WIDGET_H
#define WIDGET_H#include QWidgetQT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void Fb_Change(); // 中缀转换为后缀表达式void Clear();
public:int i,j;private slots:void on_but_one_clicked();void on_but_zero_clicked();void on_but_two_clicked();void on_but_three_clicked();void on_but_four_clicked();void on_but_five_clicked();void on_but_six_clicked();void on_but_seven_clicked();void on_but_eight_clicked();void on_but_nine_clicked();void on_but_add_clicked();void on_but_sub_clicked();void on_but_mul_clicked();void on_but_div_clicked();void on_but_leftbrk_clicked();void on_but_rightbrk_clicked();void on_but_cls_clicked();void on_but_bit_clicked();void on_but_eql_clicked();void on_but_close_clicked();private:Ui::Widget *ui;int Data[128]; // data stackchar suffix[128]; // 后缀表达式 stackchar sign[128]; // 符号栈char Chars[1024]; // zhong缀表达式字符数组int data_sp 0; // 数据栈顶指针int suffix_sp 0; // 后缀栈顶指针int sign_sp 0; // 符号栈顶指针int char_sp 0; //int Operation_end 0; // 运算结束标志位,1:运算结束
};
#endif // WIDGET_H3.2 widget.c
#include widget.h
#include ui_widget.h
#include qdebug.hWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_but_one_clicked()
{this-Chars[char_sp] 1;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_zero_clicked()
{this-Chars[char_sp] 0;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_two_clicked()
{this-Chars[char_sp] 2;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_three_clicked()
{this-Chars[char_sp] 3;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_four_clicked()
{this-Chars[char_sp] 4;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_five_clicked()
{this-Chars[char_sp] 5;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_six_clicked()
{this-Chars[char_sp] 6;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_seven_clicked()
{this-Chars[char_sp] 7;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_eight_clicked()
{this-Chars[char_sp] 8;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_nine_clicked()
{this-Chars[char_sp] 9;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_add_clicked()
{this-Chars[char_sp] ;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_sub_clicked()
{this-Chars[char_sp] -;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_mul_clicked()
{this-Chars[char_sp] *;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_div_clicked()
{this-Chars[char_sp] /;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_leftbrk_clicked()
{this-Chars[char_sp] (;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_rightbrk_clicked()
{this-Chars[char_sp] );Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));
}void Widget::on_but_cls_clicked()
{Clear();
}void Widget::on_but_bit_clicked()
{if(Operation_end 0) // 没有运算结束{this-Chars[--char_sp] ;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars));}else {// 运算结束Clear();}
}void Widget::on_but_eql_clicked()
{Fb_Change();
}
void Widget::Clear()
{this-char_sp 0;ui-lineEdit-clear();for(i0; isign_sp; i){this-sign[i] ;}sign[0] \0;this-sign_sp 0;for(i0; isuffix_sp; i){this-suffix[i] ;}this-suffix_sp 0;suffix[0] \0;for(i0; idata_sp; i){this-Data[i] 0;}this-data_sp 0;Operation_end 0; // 运算结束标志位
}// 中缀转换为后缀表达式
void Widget::Fb_Change()
{int font0;int flag 0;i char_sp;j 0;int count 0;// 12*434/5-(5667*4)32 12 4 * 34 5 / 56 67 4 * - 32 qDebug() 1;while(i--) // 总共字符个数{if(isdigit(this-Chars[j])) // 如果是数字字符{if(flag 0){suffix[suffix_sp] this-Chars[j]; // !j;}else{suffix[suffix_sp] ; // 主要是为了正确分割数据, 和flag配合suffix[suffix_sp] this-Chars[j]; // !j;flag 0;}continue;}if((sign_sp 0 || sign[sign_sp-1] () this-Chars[j] ! )) // 如果符hao栈为空或者栈顶元素为({qDebug() null endl;suffix[suffix_sp] ; // 主要是为了正确分割数据, 和flag配合sign[sign_sp] this-Chars[j]; // !j;flag 1; // 主要是为了正确分割数据continue;}//if((this-Chars[j] * || this-Chars[j] /) (sign[sign_sp-1] - || sign[sign_sp-1] )){sign[sign_sp] this-Chars[j]; // !j;flag 1; //continue;}if((this-Chars[j] * || this-Chars[j] /) (sign[sign_sp-1] * || sign[sign_sp-1] /)){suffix[suffix_sp] ; // 主要是为了正确分割数据, 和flag配合suffix[suffix_sp] sign[--sign_sp];sign[sign_sp] this-Chars[j];j;flag 1; // 主要是为了正确分割数据continue;}if(this-Chars[j] || this-Chars[j] -){suffix[suffix_sp] ; // 主要是为了正确分割数据, 和flag配合suffix[suffix_sp] sign[--sign_sp];sign[sign_sp] this-Chars[j];j;flag 1; //continue;}if(this-Chars[j] (){sign[sign_sp] this-Chars[j]; // !j;flag 1; //continue;}if(this-Chars[j] )){while(sign[--sign_sp] ! (){suffix[suffix_sp] ; // 主要是为了正确分割数据, 和flag配合suffix[suffix_sp] sign[sign_sp];}sign[sign_sp] ;j;flag 1; //continue;}}while(sign_sp--){suffix[suffix_sp] sign[sign_sp];}suffix[suffix_sp] \0;qDebug() suffix;// suffix computeint arg_01, arg_02;for(i0; i suffix_sp; i){if(suffix[i] 0 suffix[i] 9){font font*count*10 ((int)suffix[i] - 48); // 252count 1;continue;}if(suffix[i] ){if(count 1) // 说明取过数{Data[data_sp] font;font 0;}count 0;continue;}if(suffix[i] ){if(count 1) // 说明取过数{Data[data_sp] font;font 0;}arg_01 Data[--data_sp]; //arg_02 Data[--data_sp]; //Data[data_sp] arg_01arg_02;qDebug() Data[data_sp - 1];count 0;continue;}if(suffix[i] -){if(count 1) // 说明取过数{Data[data_sp] font;font 0;}arg_01 Data[--data_sp]; //arg_02 Data[--data_sp]; //Data[data_sp] arg_02 - arg_01;count 0;continue;}if(suffix[i] *){if(count 1) // 说明取过数{Data[data_sp] font;font 0;}arg_01 Data[--data_sp]; //arg_02 Data[--data_sp]; //Data[data_sp] arg_01 * arg_02;count 0;continue;}if(suffix[i] /){if(count 1) // 说明取过数{Data[data_sp] font;font 0;}arg_01 Data[--data_sp]; //arg_02 Data[--data_sp]; //Data[data_sp] arg_02 / arg_01;count 0;continue;}}qDebug() Data[0];ui-lineEdit-clear();this-Chars[char_sp] ;Chars[char_sp] \0;ui-lineEdit-setText(QString::fromUtf8(this-Chars)QString::number(Data[0]));Operation_end 1; // 运算结束标志位}
// 237 238 236void Widget::on_but_close_clicked()
{this-close(); // close window
}4 完整代码
https://download.csdn.net/download/qq_51458770/89492760