前言
学习QT的使用。顺便复习一下C++
一、计算机小项目
做一个计算器小项目练手
二、使用步骤
1.头文件声明
代码如下(系统生成按键的槽函数省略):
class Calculator : public QMainWindow
{
Q_OBJECT
public:
Calculator(QWidget *parent = nullptr);
void Paramter_plus();
void Paramter_minus();
void Paramter_multiply();
void Paramter_devide();
void return_Result(int signal=0);
void on_botton_clicked(float num ,int signal);
~Calculator();
private:
Ui::Calculator *ui;
int signal_flag; //加减符号标志
float first_mumb,second_numb; //第一个数 第二个数
QString Textshow; //显示的文本
void Change_windows_size();
QVector<int> *p;
}
2.实现
代码如下(示例):
void Calculator::on_botton_clicked(float num ,int signal)
{
if(p==nullptr)
p=new QVector<int>; //创建vector用于多位数运算
if(signal!=0) /* 有运算符之后是第二个数 */
{
ui->plainTextEdit->insertPlainText(QString::number(num));
p->append(num);
}
else{ //在运算符输入之前看作第一个数
p->append(num);
ui->plainTextEdit->insertPlainText(QString::number(num));
}
}
void Calculator::on_pushButton_1_clicked() //按键1
{
on_botton_clicked(1,this->signal_flag); //传入的一个参数为值,第二个为运算符号
}
void Calculator::on_pushButton_plus_clicked()
{
int singal=1;
return_Result(this->signal_flag); //在输入运算符的时候先将前面的n位数计算
if(signal_flag!=singal)
{
if(signal_flag!=0) //如果在一个运算符后紧接着输入+,那么第一个运算符被覆盖掉
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();//使用QTextCursor类(光标) 获取当前plainTextEdit的光标位置
textCursor.deletePreviousChar(); //删除光标之前的文本
}
}
signal_flag=singal;
ui->plainTextEdit->insertPlainText((QString)'+');
}
void Calculator::on_pushButton_min_clicked()
{
int singal=2;
return_Result(this->signal_flag);
if(signal_flag!=singal)
{
if(signal_flag!=0)
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
signal_flag=singal;
ui->plainTextEdit->insertPlainText((QString)'-');
}
void Calculator::on_pushButton_mul_clicked()
{
int singal=3;
return_Result(this->signal_flag);
if(signal_flag!=singal)
{
if(signal_flag!=0)
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
signal_flag=singal;
ui->plainTextEdit->insertPlainText((QString)'*');
}
void Calculator::on_pushButton_qrt_clicked()
{
int singal=5;
return_Result(this->signal_flag);
if(signal_flag!=singal)
{
if(signal_flag!=0)
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
signal_flag=singal;
ui->plainTextEdit->insertPlainText((QString)"√");
}
void Calculator::on_pushButton_percent_clicked()
{
int singal=6;
return_Result(this->signal_flag);
if(signal_flag!=singal)
{
if(signal_flag!=0)
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
signal_flag=singal;
ui->plainTextEdit->appendPlainText((QString)'%');
}
void Calculator::on_pushButton_dive_clicked()
{
int singal=4;
return_Result(signal_flag);
if(signal_flag!=singal)
{
if(signal_flag!=0)
{
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
signal_flag=singal;
ui->plainTextEdit->insertPlainText((QString)'/');
}
void Calculator::on_pushButton_equal_clicked()
{
return_Result(this->signal_flag);
signal_flag=0;
second_numb=0;
ui->plainTextEdit->insertPlainText((QString)'=');
ui->plainTextEdit->appendPlainText(QString::number(first_mumb));
}
void Calculator::return_Result(int signal)
{
int length;
length=p->size();
QVector<int>::Iterator i;
for(i=p->begin();i!=p->end();i++)
{
if(signal_flag!=0) //将vector的前n位数计算,如输入 1 1 1 ,vector{1,1,1}变为整数111
second_numb+=*i*pow(10,--length);
else
first_mumb+=*i*pow(10,--length);
}
p->clear(); //清除vector容器内容
switch(signal)
{
case 1:
first_mumb=first_mumb+second_numb;
break;
case 2:
first_mumb=first_mumb-second_numb;
break;
case 3:
first_mumb=first_mumb*second_numb;
break;
case 4:
first_mumb=first_mumb/second_numb;
break;
case 5:
first_mumb=sqrt(first_mumb);
break;
case 6:
break;
}
}
void Calculator::on_pushButton_ce_clicked() //ce清除本次输入的数据
{
int num=0;
int length=0;
return_Result(this->signal_flag);
if(signal_flag==0)
{
num=first_mumb;
first_mumb=0;
while(num)
{
length++;
num/=10;
}
}else
{
num=second_numb;
second_numb=0;
while(num)
{
length++;
num/=10;
}
}
for (int var = 0; var < length; ++var) {
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
void Calculator::on_pushButton_c_clicked() //清除所有数据和文本
{
first_mumb=0;
second_numb=0;
signal_flag=0;
ui->plainTextEdit->clear();
}
void Calculator::on_pushButton_delet_clicked() //←键如果容器不为空则删除1个元素
{
if(p->size()!=0)
{
p->removeLast();
QTextCursor textCursor= ui->plainTextEdit->textCursor();
textCursor.deletePreviousChar();
}
}
总结
学习C以后学习C++,要多以面向对象的方式思考编程,在text文本中可以使用光标对于内容进行一些操作,对于block输入还未尝试,后面有机会慢慢接触到,要源码的同学请留言。