Qt實(shí)現(xiàn)制作簡單的計(jì)算器
前言
今天使用qt制作了一個(gè)很簡單的計(jì)算器,覺得挺有意思的,所以在這里跟大家分享一下。
這里先跟大家說說使用到的函數(shù):
1、槽連接函數(shù)
connect(信號(hào)發(fā)送者,發(fā)送的信號(hào),信號(hào)接收者,信號(hào)接收者的槽函數(shù)) //前面我有一篇文章已經(jīng)介紹過槽函數(shù)的使用了,大家有興趣可以看看,這里就不詳細(xì)說了。
2、取出按鈕中的字符
QString line = ui->pushButton1->text() //取出按鈕pushButton1中的字符存放到line中
3、設(shè)置輸入框中顯示的內(nèi)容
ui->lineEdit->setText(line); //設(shè)置輸入框lineEdit中顯示的內(nèi)容,line為要顯示的內(nèi)容
4、清空字符數(shù)組
line.clear(); //清空字符數(shù)組line中的內(nèi)容
5、將字符轉(zhuǎn)換成整形、浮點(diǎn)型、數(shù)值
double sum = temp1.toDouble() + temp2.toDouble(); //將字符轉(zhuǎn)換成浮點(diǎn)型
6、將整形、浮點(diǎn)型、數(shù)值轉(zhuǎn)換成字符
ui->lineEdit->setText(QString::number(sum)); //將浮點(diǎn)型轉(zhuǎn)換成字符
7、從字符的最后一位開始往開頭的方向按位刪除字符
line.chop(1); //尾剔除,即是從字符串后面開始按位刪除,每次刪除字符數(shù)組line中的一位,如果是2則是每次兩位,依次類推
完整代碼
下面是頭文件widget.h中的代碼:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QString>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected slots:
void item0();//0
void item1();//1
void item2();//2
void item3();//3
void item4();//4
void item5();//5
void item6();//6
void item7();//7
void item8();//8
void item9();//9
void sub();//減號(hào)
void div();//除號(hào)
void mul();//乘號(hào)
void cancel();//取消
void delet();//尾剔除
void add();//加號(hào)
void equal();//等于號(hào)
void point();//小數(shù)點(diǎn)
private:
Ui::Widget *ui;
};
#endif // WIDGET_H源文件widget.cpp中的代碼:
#include "widget.h"
#include "ui_widget.h"
#include <QString>
#include <QDebug>
#include <stdlib.h>
#include <string.h>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//連接槽函數(shù)
connect(ui->pushButton0,SIGNAL(clicked(bool)),this,SLOT(item0())); //0
connect(ui->pushButton1,SIGNAL(clicked(bool)),this,SLOT(item1())); //1
connect(ui->pushButton2,SIGNAL(clicked(bool)),this,SLOT(item2())); //2
connect(ui->pushButton3,SIGNAL(clicked(bool)),this,SLOT(item3())); //3
connect(ui->pushButton4,SIGNAL(clicked(bool)),this,SLOT(item4())); //4
connect(ui->pushButton5,SIGNAL(clicked(bool)),this,SLOT(item5())); //5
connect(ui->pushButton6,SIGNAL(clicked(bool)),this,SLOT(item6())); //6
connect(ui->pushButton7,SIGNAL(clicked(bool)),this,SLOT(item7())); //7
connect(ui->pushButton8,SIGNAL(clicked(bool)),this,SLOT(item8())); //8
connect(ui->pushButton9,SIGNAL(clicked(bool)),this,SLOT(item9())); //9
connect(ui->pushButton_c,SIGNAL(clicked(bool)),this,SLOT(cancel()));//取消
connect(ui->pushButton_add,SIGNAL(clicked(bool)),this,SLOT(add()));//加號(hào)
connect(ui->pushButton_equal,SIGNAL(clicked(bool)),this,SLOT(equal()));//等于號(hào)
connect(ui->pushButton_point,SIGNAL(clicked(bool)),this,SLOT(point()));//小數(shù)點(diǎn)
connect(ui->pushButton_div,SIGNAL(clicked(bool)),this,SLOT(div()));//除號(hào)
connect(ui->pushButton_sub,SIGNAL(clicked(bool)),this,SLOT(sub()));//減號(hào)
connect(ui->pushButton_mul,SIGNAL(clicked(bool)),this,SLOT(mul()));//乘號(hào)
connect(ui->pushButton_delete,SIGNAL(clicked(bool)),this,SLOT(delet()));//尾剔除
}
QString line;
QString item_0; //0
QString item_1; //1
QString item_2; //2
QString item_3;//3
QString item_4;//4
QString item_5;//5
QString item_6;//6
QString item_7;//7
QString item_8;//8
QString item_9;//9
QString temp1,temp2; //臨時(shí)存放兩次輸入的要進(jìn)行計(jì)算的項(xiàng)
double sum = 0; //計(jì)算后的結(jié)果
int flag = 0,flag1 = 0; //flag加號(hào)標(biāo)志,flag1等于號(hào)標(biāo)志
int flag3 = 0;//減號(hào)標(biāo)志
int flag4 = 0;//乘號(hào)標(biāo)志
int flag5 = 0;//除號(hào)標(biāo)志
Widget::~Widget()
{
delete ui;
}
void Widget::item0() //0
{
item_0 = ui->pushButton0->text(); //獲取按鍵中的字符"0"
line += item_0;//每按一次按鍵就相加一次按鍵中的字符"0"
ui->lineEdit->setText(line); //顯示到輸入條中
}
void Widget::item1() //1
{
item_1 = ui->pushButton1->text();
line += item_1;
ui->lineEdit->setText(line);
}
void Widget::item2() //2
{
item_2 = ui->pushButton2->text(); //獲取按鍵中的字符"2"
line += item_2; //每按一次按鍵就相加一次按鍵中的字符"2"
ui->lineEdit->setText(line);
}
void Widget::item3() //3
{
item_3 = ui->pushButton3->text(); //獲取按鍵中的字符"3"
line += item_3; //每按一次按鍵就相加一次按鍵中的字符"3"
ui->lineEdit->setText(line);
}
void Widget::item4() //4
{
item_4 = ui->pushButton4->text();
line += item_4;
ui->lineEdit->setText(line);
}
void Widget::item5() //5
{
item_5 = ui->pushButton5->text();
line += item_5;
ui->lineEdit->setText(line);
}
void Widget::item6() //6
{
item_6 = ui->pushButton6->text();
line += item_6;
ui->lineEdit->setText(line);
}
void Widget::item7() //7
{
item_7 = ui->pushButton7->text();
line += item_7;
ui->lineEdit->setText(line);
}
void Widget::item8() //8
{
item_8 = ui->pushButton8->text();
line += item_8;
ui->lineEdit->setText(line);
}
void Widget::item9() //9
{
item_9 = ui->pushButton9->text();
line += item_9;
ui->lineEdit->setText(line);
}
void Widget::point() //小數(shù)點(diǎn)
{
if(flag1 == 0) //沒有按等于號(hào)按鍵,說明沒有進(jìn)行運(yùn)算,所以顯示第一次輸入的字符串
{
line +=".";
ui->lineEdit->setText(line);
}
if(flag1 == 1) //按了等于號(hào)按鍵,這時(shí)候要顯示后面一次輸入的字符串
{
line = ui->lineEdit->text();
line += ".";
ui->lineEdit->setText(line);
flag1 = 0;
}
}
void Widget::delet() //尾剔除
{
line = ui->lineEdit->text(); //獲取輸入條中的字符
line.chop(1); //倒位刪除,即是從字符串后面開始按位刪除
ui->lineEdit->setText(line);
}
void Widget::cancel() //重新置零
{
line.clear();
temp1.clear();
temp2.clear();
sum = 0;
flag = 0;
flag1 = 0;
flag3 = 0;
flag4 =0;
flag5 = 0;
ui->lineEdit->setText(line);//輸出0
}
void Widget::add() //相加
{
flag = 1;
temp1 = ui->lineEdit->text(); //獲取前面輸入的字符,并臨時(shí)保存起來
line.clear(); //清空字符數(shù)組
ui->lineEdit->setText(line);//顯示清空狀態(tài)
}
void Widget::sub() //相減
{
flag3 = 1;//按了加號(hào)按鍵就改變狀態(tài)
temp1 = ui->lineEdit->text(); //獲取前面輸入的字符,并臨時(shí)保存起來
line.clear(); //清空字符數(shù)組
ui->lineEdit->setText(line);//顯示清空狀態(tài)
}
void Widget::div()//除法
{
flag4 = 1;//按了加號(hào)按鍵就改變狀態(tài)
temp1 = ui->lineEdit->text(); //獲取前面輸入的字符,并臨時(shí)保存起來
line.clear(); //清空字符數(shù)組
ui->lineEdit->setText(line);//顯示清空狀態(tài)
}
void Widget::mul()//乘法
{
flag5 = 1;//按了加號(hào)按鍵就改變狀態(tài)
temp1 = ui->lineEdit->text(); //獲取前面輸入的字符,并臨時(shí)保存起來
line.clear(); //清空字符數(shù)組
ui->lineEdit->setText(line);//顯示清空狀態(tài)
}
void Widget::equal() //得出結(jié)果
{
flag1 = 1; //按一次等于號(hào)就改變狀態(tài)
if(flag == 1) //加法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() + temp2.toDouble(); //將字符轉(zhuǎn)換成浮點(diǎn)型
ui->lineEdit->setText(QString::number(sum)); //將浮點(diǎn)型轉(zhuǎn)換成字符
flag = 0; //重新讓標(biāo)志位置零,等待下一次的加法進(jìn)行
}
else if(flag3 == 1) //減法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
ui->lineEdit->setText(line);
sum = temp1.toDouble() - temp2.toDouble(); //將字符轉(zhuǎn)換成浮點(diǎn)型
if(sum == 0) //等于0
{
ui->lineEdit->setText("0");
}
ui->lineEdit->setText(QString::number(sum)); //將浮點(diǎn)型轉(zhuǎn)換成字符
// qDebug()<<sum;
flag3 = 0; //重新讓標(biāo)志位置零,等待下一次的減法進(jìn)行
}
else if(flag4 == 1) //除法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() / temp2.toDouble(); //將字符轉(zhuǎn)換成浮點(diǎn)型
if(temp2 == "0") //分母等于0
{
ui->lineEdit->setText("0");
}
ui->lineEdit->setText(QString::number(sum)); //將浮點(diǎn)型轉(zhuǎn)換成字符
flag4 = 0; //重新讓標(biāo)志位置零,等待下一次的除法進(jìn)行
}
else if(flag5 == 1) //乘法
{
temp2 = ui->lineEdit->text();
line.clear(); //清空字符串
sum = temp1.toDouble() * temp2.toDouble(); //將字符轉(zhuǎn)換成浮點(diǎn)型
ui->lineEdit->setText(QString::number(sum)); //將浮點(diǎn)型轉(zhuǎn)換成字符
flag5 = 0; //重新讓標(biāo)志位置零,等待下一次的乘法進(jìn)行
}
}效果圖
效果圖如下:

到此這篇關(guān)于Qt實(shí)現(xiàn)制作簡單的計(jì)算器的文章就介紹到這了,更多相關(guān)Qt計(jì)算器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中左值引用,右值引用,萬能引用的關(guān)系及區(qū)別說明
這篇文章主要介紹了C++中左值引用,右值引用,萬能引用的關(guān)系及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
C語言鏈表案例學(xué)習(xí)之通訊錄的實(shí)現(xiàn)
為了將所學(xué)到的鏈表的知識(shí)進(jìn)行鞏固學(xué)習(xí),做到學(xué)以致用,本文將利用鏈表制作一個(gè)簡單的通訊錄。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10
Qt自定義控件實(shí)現(xiàn)圓盤進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Qt自定義控件實(shí)現(xiàn)圓盤進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
C++多態(tài)的實(shí)現(xiàn)及原理詳細(xì)解析
C++的多態(tài)性用一句話概括就是:在基類的函數(shù)前加上virtual關(guān)鍵字,在派生類中重寫該函數(shù),運(yùn)行時(shí)將會(huì)根據(jù)對(duì)象的實(shí)際類型來調(diào)用相應(yīng)的函數(shù)。如果對(duì)象類型是派生類,就調(diào)用派生類的函數(shù);如果對(duì)象類型是基類,就調(diào)用基類的函數(shù)2013-09-09

