代码:
头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QString>
#include <QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
// 自定义的槽函数
// 信号与槽::槽函数的声明
void on_btn_login_clicked();
void on_btn_cancel_clicked();
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QTextToSpeech *speech;
};
void show_dialog_err(Widget *);
void show_dialog_correct(Widget *);
void show_dialog_ques(Widget *);
#endif // WIDGET_H
源文件:
#include "widget.h"
#include "ui_widget.h"
#include <QIcon>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 窗体
setWindowIcon(QIcon("D:/壁纸/TEMP/蓝.jpg"));
setWindowTitle("QQ");
setFixedSize(QSize(300,400));
// 组件位置
ui->l_logo->move(0,0);
ui->l_logo->resize(300,200);
ui->l_account->move(30,220);
ui->l_account->resize(20,20);
ui->l_passwd->move(30,220+ui->l_account->height()+10);
ui->l_passwd->resize(20,20);
ui->le_account->move(60,220);
ui->le_account->resize(200,20);
ui->le_passwd->move(60,220+ui->le_account->height()+10);
ui->le_passwd->resize(200, 20);
// 组件属性
ui->l_logo->setPixmap(QPixmap(":/logo.png"));
ui->l_logo->setScaledContents(true);
ui->l_account->setPixmap(QPixmap(":/userName.jpg"));
ui->l_account->setScaledContents(true);
ui->l_passwd->setPixmap(QPixmap(":/passwd.jpg"));
ui->l_passwd->setScaledContents(true);
ui->le_account->setPlaceholderText("请输入账户:");
ui->le_passwd->setPlaceholderText("请输入密码:");
ui->le_passwd->setEchoMode(QLineEdit::Password);
// ui->le_passwd->setFont(QFont())
ui->btn_login->setIcon(QIcon(":/login.png"));
ui->btn_cancel->setIcon(QIcon(":/cancel.png"));
// 播报类
speech = new QTextToSpeech(this);// 实例化播报员
// 信号与槽4版本->5版本
// 连接登录按钮的clicked信号,到槽函数
connect(ui->btn_login, &QPushButton::clicked, this, &Widget::on_btn_login_clicked, Qt::AutoConnection);
// 连接取消按钮的clicked信号,到槽函数
connect(ui->btn_cancel, &QPushButton::clicked, this, &Widget::on_btn_cancel_clicked);
// 信号与槽c11版本
connect(ui->btn_login, &QPushButton::clicked, [&](){
if(ui->le_passwd->text() == "")
{
qDebug() << "密码为空";
}
if(ui->le_account->text() == "")
{
qDebug() << "用户名为空";
}
});
}
Widget::~Widget()
{
delete ui;
}
// 信号与槽::槽函数的定义
// 登录按钮对应的槽函数
void Widget::on_btn_login_clicked()
{
// 播报员
speech->say("您的用户名是");
speech->say(ui->le_account->text());
qDebug() << "用户点击登录按钮";
if(ui->le_account->text() == "admin")
{
// qDebug() << "用户名正确";
if(ui->le_passwd->text() == "123456")
{
qDebug() << "登录成功";
// 显示登录成功对话框
show_dialog_correct(this);
}
else
{
qDebug() << "密码错误";
ui->le_passwd->setText("");
// 显示错误对话框
show_dialog_err(this);
}
}
else
{
qDebug() << "用户名错误";
}
}
// 取消按钮对应的槽函数
void Widget::on_btn_cancel_clicked()
{
qDebug() << "用户点击取消按钮";
show_dialog_ques(this);
}
// 显示错误对话框
void show_dialog_err(Widget *obj)
{
QMessageBox err_msg(QMessageBox::NoIcon,
"错误",
"账号密码不匹配,是否重新登录",
QMessageBox::Ok|QMessageBox::Cancel,
obj);
int ret = err_msg.exec();
if(ret == QMessageBox::Ok)
{
err_msg.close();
}
else if(ret == QMessageBox::Cancel)
{
err_msg.close();
obj->close();
}
return ;
}
// 显示成功对话框
void show_dialog_correct(Widget *obj)
{
QMessageBox correct_msg(QMessageBox::NoIcon,
"成功",
"登录成功",
QMessageBox::Ok,
obj);
int ret = correct_msg.exec();
if(ret == QMessageBox::Ok)
{
correct_msg.close();
obj->close();
}
return ;
}
// 显示退出对话框
void show_dialog_ques(Widget *obj)
{
QMessageBox cancel_msg(QMessageBox::NoIcon,
"退出",
"是否确定退出登录",
QMessageBox::Ok|QMessageBox::Cancel,
obj);
int ret = cancel_msg.exec();
if(ret == QMessageBox::Ok)
{
cancel_msg.close();
obj->close();
}
else if(ret == QMessageBox::Cancel)
{
cancel_msg.close();
}
return ;
}
知识整理: