236 lines
6.8 KiB
C++
236 lines
6.8 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(datamanager,&DataManager::update_code,mainwidget,&Widget::update_code);
|
|
connect(datamanager,&DataManager::update_line,mainwidget,&Widget::update_line);
|
|
connect(mainwidget, &Widget::parking, datamanager, &DataManager::parking);
|
|
connect(mainwidget, &Widget::pick_up, datamanager, &DataManager::pick_up);
|
|
connect(mainwidget, &Widget::find_code, datamanager, &DataManager::find_code);
|
|
|
|
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();
|
|
}
|