qt入门之简易计算器


最近考完试比较闲了,简单学了一下qt,做了个最基本的计算器。

界面设计

通过可视化的方法,拖动实现界面

逻辑实现

在头文件中实现类的定义和类内成员的声明


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int num1;
    int num2;
    double result;
    int op;

private slots:
    void on_button_1_clicked();

    void on_button_2_clicked();

    void on_button_3_clicked();

    void on_button_add_clicked();

    void on_button_4_clicked();

    void on_button_5_clicked();

    void on_button_6_clicked();

    void on_button_sub_clicked();

    void on_button_7_clicked();

    void on_button_8_clicked();

    void on_button_9_clicked();

    void on_button_mult_clicked();

    void on_button_clear_clicked();

    void on_button_0_clicked();

    void on_button_equal_clicked();

    void on_button_div_clicked();

private:
    Ui::MainWindow *ui;
};

在cpp文件中实现类内成员的定义

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("计算器1.0");
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_button_1_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("1");
}

void MainWindow::on_button_2_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("2");
}

void MainWindow::on_button_3_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("3");
}

void MainWindow::on_button_add_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("+");
}

void MainWindow::on_button_4_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("4");
}

void MainWindow::on_button_5_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("5");
}

void MainWindow::on_button_6_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("6");
}

void MainWindow::on_button_sub_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("-");
}

void MainWindow::on_button_7_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("7");
}

void MainWindow::on_button_8_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("8");
}

void MainWindow::on_button_9_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("9");
}

void MainWindow::on_button_mult_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("*");
}

void MainWindow::on_button_clear_clicked()
{
 ui->textEdit->setText("");
}

void MainWindow::on_button_0_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("0");
}

void MainWindow::on_button_equal_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("=");
       QString text = ui->textEdit->toPlainText();
       string text1=text.toStdString();
       //cout<<text1<<endl;
       //cout<<text1[1]<<endl;
       int len=text1.size();
       const char * text2=text1.c_str();
       cout<<text2;
       int flag=0;
       num1=0;
       num2=0;
       op=0;
       result=0;
       for(int i=0;i<len;i++){
       if(text2[i]>='0'&&text2[i]<='9'){
       if(flag==0){
           num1=num1*10+text2[i]-'0';
       }
       if(flag==1){
           num2=num2*10+text2[i]-'0';
       }
       }else if(text2[i]=='+'){
           flag=1;
           op=1;
           cout<<"+++"<<endl;
       }
       else if(text2[i]=='-'){
           flag=1;
           op=2;
       }
       else if(text2[i]=='*'){
           flag=1;
           op=3;
       }
       else if(text2[i]=='/'){
           flag=1;
           op=4;
       }
       else if(text2[i]=='='){
           if(op==1){
               result=num1+num2;
               cout<<num1<<endl;
               cout<<num2<<endl;
           }
           if(op==2){
               result=num1-num2;
           }
           if(op==3){
               result=num1*num2;
           }
           if(op==4){
               result=(num1*1.00)/num2;
           }

              ui->textEdit->moveCursor(QTextCursor::End);
              ui->textEdit->insertPlainText(QString::number(result));
       }
       }

}

void MainWindow::on_button_div_clicked()
{
    ui->textEdit->moveCursor(QTextCursor::End);
       ui->textEdit->insertPlainText("/");
}

原理分析

qt整体的架构还是比较清晰的,界面和逻辑部分互相分离,又通过信号与槽进行必要的通信。
头文件中完成了类的定义,而对类的成员函数仅作声明,具体实现在cpp文件中完成,整个过程实现了类内声明,类外定义。
计算器的基本原理也比较简单,按下按钮时,字符附加到编辑框对应的字符串后,最后按下等号时读取整个字符串,分离两个操作数和一个运算符,进行计算,并将最后的计算结果显示到编辑框中。

测试结果

生成exe文件并通过命令行配置好注册表文件后,点击exe文件就可以正常运行了,运行结果如图所示。


文章作者: pcl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 pcl !
评论
  目录