#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 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) { QScopedPointeranimalton(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(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(); }