Qt creator 学习,QT GUI程序,计算器,2025.1.29

参考:Qt C++编程,从入门到实战,彭源

1.登录界面

2.计算器界面

3.计算器头文件:widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QString>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btn_1_clicked();

    void on_btn_2_clicked();

    void on_btn_3_clicked();

    void on_btn_4_clicked();

    void on_btn_5_clicked();

    void on_btn_6_clicked();

    void on_btn_7_clicked();

    void on_btn_8_clicked();

    void on_btn_9_clicked();

    void on_btn_0_clicked();

    void on_btn_Point_clicked();

    void on_btn_clear_clicked();

    void on_btn_Add_clicked();

    void on_btn_Times_clicked();

    void on_btn_Minus_clicked();

    void on_btn_Calc_clicked();

    void on_btn_Divide_clicked();

private:
    Ui::Widget *ui;
    QString operandStr1;        //用于存储字符串形式的左操作数
    QString operatorStr;        //用于存储操作符
};
#endif // WIDGET_H

4.计算器源文件:widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "QMessageBox"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    operandStr1 = "";
    operatorStr = "";
}

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


void Widget::on_btn_1_clicked()  //按钮1
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"1");
}

void Widget::on_btn_2_clicked() //按钮2
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"2");
}

void Widget::on_btn_3_clicked()//按钮3
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"3");
}

void Widget::on_btn_4_clicked()//按钮4
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"4");
}

void Widget::on_btn_5_clicked()//按钮5
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"5");
}

void Widget::on_btn_6_clicked()//按钮6
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"6");
}

void Widget::on_btn_7_clicked()//按钮7
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"7");
}

void Widget::on_btn_8_clicked()//按钮8
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"8");
}

void Widget::on_btn_9_clicked()//按钮9
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"9");
}

void Widget::on_btn_0_clicked()//按钮0
{
    ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +"0");
}

void Widget::on_btn_Point_clicked()//按钮小数点
{
    if(ui->lineEdit_Input->text() =="")
       ui->lineEdit_Input->setText("0.")  ;
    else if (ui->lineEdit_Input->text().contains(".") ==true) //已经有小数点
        ;
    else
        ui->lineEdit_Input->setText(ui->lineEdit_Input->text() +".");
}

void Widget::on_btn_clear_clicked()
{
      ui->lineEdit_Input->clear();      //清空Input
}

void Widget::on_btn_Add_clicked()//按钮加号
{
    if(ui->lineEdit_Input->text() =="") //没有输入数据
        return;
    else if (operandStr1 == "" )        //没有左操作数
    {
        operandStr1 =ui->lineEdit_Input->text();
        operatorStr = "+";
        ui->lineEdit_Input->clear();        //输入文本框清空
        ui->lineEdit_Show->setText(operandStr1+operatorStr);
    }
    else
        on_btn_Times_clicked();     //有左操作数后开始计算

}



void Widget::on_btn_Minus_clicked()     //减号
{
    if(ui->lineEdit_Input->text() =="") //没有输入数据
        return;
    else if (operandStr1 == "" )        //没有左操作数
    {
        operandStr1 =ui->lineEdit_Input->text();
        operatorStr = "-";
        ui->lineEdit_Input->clear();        //输入文本框清空
        ui->lineEdit_Show->setText(operandStr1+operatorStr);
    }
    else
        on_btn_Times_clicked();     //有左操作数后开始计算
}

void Widget::on_btn_Calc_clicked()      //乘
{
    if(ui->lineEdit_Input->text() =="") //没有输入数据
        return;
    else if (operandStr1 == "" )        //没有左操作数
    {
        operandStr1 =ui->lineEdit_Input->text();
        operatorStr = "*";
        ui->lineEdit_Input->clear();        //输入文本框清空
        ui->lineEdit_Show->setText(operandStr1+operatorStr);
    }
    else
        on_btn_Times_clicked();     //有左操作数后开始计算
}

void Widget::on_btn_Divide_clicked()
{
    if(ui->lineEdit_Input->text() =="") //没有输入数据
        return;
    else if (operandStr1 == "" )        //没有左操作数
    {
        operandStr1 =ui->lineEdit_Input->text();
        operatorStr = "/";
        ui->lineEdit_Input->clear();        //输入文本框清空
        ui->lineEdit_Show->setText(operandStr1+operatorStr);
    }
    else
        on_btn_Times_clicked();     //有左操作数后开始计算
}
void Widget::on_btn_Times_clicked() //按钮等号,计算
{
    if(operandStr1 !="" && ui->lineEdit_Input->text() !="" && operatorStr!="" )
    {
        double result =0.0;      //存放结果
        double operand1 = operandStr1.toDouble();   //字符串转化为小数
        double operand2 =ui->lineEdit_Input->text().toDouble();
        if(operatorStr == "+")
            result = operand1 +operand2;
        else if(operatorStr == "-")
            result = operand1 -operand2;
        else if(operatorStr == "*")
            result = operand1 *operand2;
        else if(operatorStr == "/")
        {
           if (operand2 != 0.0)
             result = operand1 +operand2;

            else
           {
             QMessageBox::warning(this, "提示", "除数不能为0");
             result =0;
            }
         }
        ui->lineEdit_Show->setText(QString::number(result));
        operandStr1 = "";       //计算完毕,操作数清空
        operatorStr = "";       //计算完毕,操作符清空
        ui->lineEdit_Input->clear();
    }
}

5. 登录界面头文件:logindialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT        // 必须包括此行以启用元对象特性

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();

private slots:
    void on_loginButton_clicked();

private:
    Ui::LoginDialog *ui;
signals:
    void LoggedIn();  // 定义一个信号

};

#endif // LOGINDIALOG_H

7.登录界面 logindialog.cpp

#include "logindialog.h"
#include "ui_logindialog.h"
#include <QMessageBox>

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
}

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

void LoginDialog::on_loginButton_clicked()  //登录按钮响应
{
    if(ui->userEdit->text() == "admin" && ui->pwdEdit->text() == "123456" )
    {
        emit(LoggedIn());
        hide();             //隐藏登录窗口
    }
    else
        QMessageBox::information(this, "提示", "用户名和密码错误");
}

8.主函数main.cpp

#include "widget.h"
#include <logindialog.h>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    LoginDialog login(&w);
    login.show();       //显示登录界面
    //w.show();
    QObject::connect(&login, SIGNAL(LoggedIn()), &w,SLOT(show()));
    return a.exec();
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值