TCPClient/login.cpp

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