parking_lot_sysytem/login.cpp

233 lines
6.5 KiB
C++

#include "login.h"
#include "ui_login.h"
Login::Login(QWidget *parent) :
QWidget(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
this->setWindowIcon(QIcon(":/icon.png"));
this->setTabOrder(ui->lineEdit_username,ui->lineEdit_password);
this->setTabOrder(ui->lineEdit_password,ui->btn_signin);
//this->setWindowFlags(Qt::FramelessWindowHint); //无边框
//this->setAttribute(Qt::WA_TranslucentBackground);
ui->btn_signin->installEventFilter(this);
/********datamanager********/
datamanager = DataManager::getInstance();
connect(datamanager,&DataManager::signin_response,this,&Login::signin_response);
connect(datamanager,&DataManager::signup_response,this,&Login::signup_response);
connect(datamanager,&DataManager::connect_to_server,this,&Login::connected);
connect(datamanager,&DataManager::disconnect_from_server,this,&Login::disconnected);
connect(this,&Login::signin_request,datamanager,&DataManager::signin_request);
connect(this,&Login::Register,datamanager,&DataManager::Register);
}
Login::~Login()
{
}
/***************************************SLOTS************************************/
void Login::on_btn_signin_clicked()
{
this->zoom_down(ui->btn_signin);
this->zoom_up(ui->btn_signin);
if(connect_flag == true)
{
user = ui->lineEdit_username->text();
passwd = ui->lineEdit_password->text();
if(user.isEmpty() || passwd.isEmpty())
{
QMessageBox::warning(this,tr("错误"),tr("用户名和密码不能为空!"));
return;
}
emit signin_request(user,passwd);
}
else
{
QMessageBox::warning(this, "登录失败", "尚未连接服务器!");
return;
}
}
void Login::on_btn_signup_clicked()
{
this->zoom_down(ui->btn_signup);
this->zoom_up(ui->btn_signup);
signup = new Signup();
connect(signup,&Signup::show_login_ui,this,&Login::show_login_ui);
connect(signup,&Signup::Register,this,&Login::slot_Register);
this->hide();
signup->show();
}
void Login::on_close_btn_clicked()
{
this->close();
}
void Login::show_login_ui()
{
this->show();
}
//等待服务器验证登陆数据
void Login::signin_response(bool result)
{
if(result == true)
{
mainwidget = new Widget();
connect(mainwidget,&Widget::account_cancellation,datamanager,&DataManager::account_cancellation);
connect(datamanager,&DataManager::disconnect_from_server,mainwidget,&Widget::disconnect_form_server);
connect(mainwidget,&Widget::exit_client,this,&Login::exit_client);
connect(mainwidget, &Widget::parking, datamanager, &DataManager::);
connect(mainwidget, &Widget::pick_up, datamanager, &DataManager::);
this->hide();
mainwidget->show();
}
else
{
QMessageBox::warning(this,tr("登录失败"),tr("用户名或密码错误!"));
}
}
//等待服务器注册数据
void Login::signup_response(bool result)
{
if(result == true)
{
QString information = QString("请妥善保存您的用户名和密码!");
QMessageBox::information(signup,tr("注册成功"),information);
signup->close();
this->show();
}
else
{
QMessageBox::warning(signup,tr("错误"),tr("注册失败,请重试!"));
}
}
//注册界面按下注册按键
void Login::slot_Register(QString username,QString password)
{
if(connect_flag == false)
{
QMessageBox::warning(signup, "注册失败", "尚未连接服务器!请连接服务器后重试");
return;
}
emit Register(username,password);
}
//连接上服务器
void Login::connected()
{
qDebug() << "connect to server";
connect_flag = true;
}
//未连上服务器或服务器断开
void Login::disconnected()
{
qDebug() << "disconnect from server";
connect_flag = false;
}
void Login::exit_client()
{
this->close();
}
/*****************************Others******************************/
void Login::zoom_down(QPushButton* btn)
{
QScopedPointer<QPropertyAnimation> animalton(new QPropertyAnimation(btn,"geometry"));
//设置间隔时间
animalton->setDuration(200);
//设置起始位置
animalton->setStartValue(QRect(btn->x(),btn->y(),btn->width(),btn->height()));
//设置结束位置
animalton->setEndValue(QRect(btn->x(),btn->y()+5,btn->width(),btn->height()));
//设置动画曲线
animalton->setEasingCurve(QEasingCurve::OutBounce);
animalton->start();
}
void Login::zoom_up(QPushButton* btn)
{
QScopedPointer<QPropertyAnimation>animalton(new QPropertyAnimation(btn,"geometry"));
animalton->setDuration(200);
animalton->setStartValue(QRect(btn->x(),btn->y()+5,btn->width(),btn->height()));
animalton->setEndValue(QRect(btn->x(),btn->y(),btn->width(),btn->height()));
animalton->setEasingCurve(QEasingCurve::OutBounce);
animalton->start();
}
void Login::new_closebutton(QPushButton* btn, QString position,QSize size)
{
QPixmap pixmap;
pixmap.load(position);
btn->setIconSize(size);
btn->setStyleSheet("QPushButton{border-width: 1px;border-style: solid;border-radius:15px;background-color: rgb(64, 145, 252);}"
"QPushButton:hover{background-color:#999999;}");
//设置图标
btn->setIcon(pixmap);
}
bool Login::eventFilter(QObject *target, QEvent *event)
{
if(target == ui->btn_signin) //可替换
{
if(event->type() == QEvent::KeyPress)//回车键
{
QKeyEvent *k = static_cast<QKeyEvent *>(event);
if(k->key() == Qt::Key_Return || k->key() == Qt::Key_Enter)
{
on_btn_signin_clicked(); //替换为需要响应的函数事件,以这里的按钮为例
return true;
}
}
}
return QWidget::eventFilter(target,event);
}
void Login::mousePressEvent(QMouseEvent *event)
{
if (event->buttons() == Qt::LeftButton)
{
point = event->pos();
}
}
void Login::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() == Qt::LeftButton)
{
//当窗口最大化或最小化时也不进行触发
if (Login::isMaximized() || Login::isMinimized())
{
return;
}
else
{
//当在按钮之类需要鼠标操作的地方不进行触发(防误触)
if (ui->btn_signin->underMouse() || ui->btn_signup->underMouse())
{
return;
}
else
{
Login::move(Login::mapToGlobal(event->pos() - point));
}
}
}
event->accept();
}