forked from yydcaib/TCPClient
230 lines
6.8 KiB
C++
230 lines
6.8 KiB
C++
#include "login.h"
|
|
#include "ui_login.h"
|
|
|
|
Login::Login(QWidget *parent) :
|
|
QMainWindow(parent),
|
|
ui(new Ui::Login)
|
|
{
|
|
/**********ui_init**********/
|
|
ui->setupUi(this);
|
|
this->setWindowIcon(QIcon(":/icon.png"));
|
|
this->setWindowFlags(Qt::FramelessWindowHint); //无边框
|
|
this->setAttribute(Qt::WA_TranslucentBackground);
|
|
new_closebutton(ui->close_btn,":/close.png", QSize(30, 30));
|
|
|
|
/********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()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void Login::paintEvent(QPaintEvent *event)
|
|
{
|
|
//创建画家,指定绘图设备
|
|
// QPainter painter(this);
|
|
//创建QPixmap对象
|
|
// QPixmap pix;
|
|
//加载图片
|
|
// pix.load(":/sources/xxx.png");
|
|
//绘制背景图
|
|
// painter.drawPixmap(0,0,this->width(),this->height(),pix);
|
|
|
|
//绘制样式
|
|
// QBitmap bmp(this->size());
|
|
// bmp.fill();
|
|
// QPainter painter(&bmp);
|
|
// painter.setPen(Qt::NoPen);
|
|
// painter.setBrush(Qt::black);
|
|
// painter.setRenderHint(QPainter::Antialiasing);
|
|
// painter.drawRoundedRect(bmp.rect(), 6, 6);
|
|
// setMask(bmp);
|
|
|
|
QPixmap pix;
|
|
pix.load(":/background.png");
|
|
|
|
QPainter painter(this);
|
|
painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
|
|
|
|
painter.setPen(Qt::transparent);
|
|
QRect rect = this->rect(); // rect为绘制大小
|
|
rect.setWidth(rect.width() - 1);
|
|
rect.setHeight(rect.height() - 1);
|
|
painter.drawRoundedRect(rect, 10, 10); // 10为圆角角度
|
|
painter.drawPixmap(rect, pix); //绘制背景图
|
|
|
|
// painter.setBrush(QBrush(QColor(255,245,225,240)));
|
|
// painter.setPen(Qt::transparent);
|
|
//也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15);
|
|
// QPainterPath painterPath;
|
|
// painterPath.addRoundedRect(rect, 15, 15);//15为圆角角度
|
|
// painter.drawPath(painterPath);
|
|
|
|
//设置阴影
|
|
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
|
|
shadow->setOffset(0, 0); //设置阴影距离
|
|
shadow->setColor(QColor("#87CEFA")); //设置阴影颜色
|
|
shadow->setBlurRadius(10); //设置阴影圆角
|
|
ui->btn_signin->setGraphicsEffect(shadow);
|
|
ui->btn_signup->setGraphicsEffect(shadow);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
void Login::on_btn_signin_clicked()
|
|
{
|
|
if(connect_flag == true)
|
|
{
|
|
user = ui->lineEdit_username->text();
|
|
passwd = ui->lineEdit_password->text();
|
|
if(user.isEmpty() || passwd.isEmpty())
|
|
{
|
|
QMessageBox::warning(this,tr("错误"),tr("用户名和密码不能为空!"));
|
|
}
|
|
emit signin_request(user,passwd);
|
|
}
|
|
else
|
|
{
|
|
QMessageBox::warning(this, "登录失败", "尚未连接服务器!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void Login::on_btn_signup_clicked()
|
|
{
|
|
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 MainWidget(user);
|
|
connect(mainwidget,&MainWidget::send_text,datamanager,&DataManager::send_text);
|
|
connect(mainwidget,&MainWidget::send_to_user,datamanager,&DataManager::send_to_user);
|
|
connect(mainwidget,&MainWidget::send_file_private,datamanager,&DataManager::send_file_private);
|
|
connect(mainwidget,&MainWidget::send_file_to_all,datamanager,&DataManager::send_file_to_all);
|
|
connect(mainwidget,&MainWidget::account_cancellation,datamanager,&DataManager::account_cancellation);
|
|
connect(datamanager,&DataManager::update_text,mainwidget,&MainWidget::update_text);
|
|
connect(datamanager,&DataManager::update_file,mainwidget,&MainWidget::update_file);
|
|
connect(datamanager,&DataManager::update_users,mainwidget,&MainWidget::update_users);
|
|
connect(mainwidget,&MainWidget::exit_client,this,&Login::exit_client);
|
|
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);
|
|
}
|
|
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();
|
|
}
|