参考: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();
}
运行结果: