/* 自定义头文件 */ #include "login.h" #include "ui_login.h" #include "textvalidator.h" /* 系统头文键 */ #include /* 预处理指令·编译指示 */ #pragma execution_character_set("utf-8") /* 构造函数1 */ Login::Login(QWidget *parent) : QMainWindow(parent), ui(new Ui::Login) { ui->setupUi(this); } /* 构造函数2 */ Login::Login(QTcpSocket *client, QWidget *parent) : QMainWindow(parent), ui(new Ui::Login) { ui->setupUi(this); /* 初始化错误信息提示 */ ui->Label_error->setText(""); /* 为登录窗口安装事件过滤器 */ this->installEventFilter(this); /* 设置密码框禁用输入法切换,只能使用英文输入法 */ ui->PasswordEdit->setAttribute(Qt::WA_InputMethodEnabled, false); /* 获得公告socket */ m_client = client; m_register = new Register(m_client,this); connect(m_register,SIGNAL(goto_login_signal()),this,SLOT(show_login_slot())); //这里的“parent,SIGNAL(login_callback_signal(QString))”,没有提醒,但是能用【AI说,这个方法太旧】 connect(parent,SIGNAL(login_callback_signal(QString)),this,SLOT(login_callback_slot(QString))); } /* 析构函数 */ Login::~Login() { delete ui; } /* 事件过滤器· */ bool Login::eventFilter(QObject *obj, QEvent *event) { if(obj == this){//当触发事件来自于这个界面 if(event->type() == QEvent::KeyPress){//当事件类型是按压按键 QKeyEvent * keyEvent = (QKeyEvent *)event; /* 当按压下enter键【有两个enter】 */ if((keyEvent->key() == Qt::Key_Return)||(keyEvent->key() == Qt::Key_Enter)){ on_LoginButton_clicked(); return true; } } } return QObject::eventFilter(obj, event); } /* 槽·登录->注册 */ void Login::on_RegisterButton_clicked() { this->hide(); m_register->show(); /* 切换时,一定要清空本界面的错误信息 */ ui->Label_error->setText(""); /* 切换时,也要清空本界面的输入信息 */ } /* 槽·注册->登录 */ void Login::show_login_slot() { this->show(); m_register->hide(); } /* 槽·点击登录 */ void Login::on_LoginButton_clicked() { QString username = ui->UserNameEdit->text(); QString password = ui->PasswordEdit->text(); /* 用户名输入框不能为空 */ if(username == ""){ QString text = "用户名不能为空!"; ui->Label_error->clear(); ui->Label_error->setText(text); return; } /* 密码输入框不能为空 */ if(password == ""){ QString text = "密码不能为空!"; ui->Label_error->clear(); ui->Label_error->setText(text); return; } /* 检查用户名格式【汉字、数字、英文字符、下划线-长度(4~10)】 */ if( !(TextValidator::isValidUsername(username)) ){ QString text = "用户名格式错误 "; ui->Label_error->clear(); ui->Label_error->setText(text); return; } /* 检查密码【英文字符、数字、下划线、点“.”-长度(5~20)】 */ if( !(TextValidator::isValidPassword(password)) ){ QString text = "密码格式错误 "; ui->Label_error->clear(); ui->Label_error->setText(text); return; } /* 如果全部正常,清空错误信息 */ ui->Label_error->setText(""); /* 提取字符串后,网络构建请求结构体 */ struct LoginReq req; strcpy(req.user_name,username.toLocal8Bit().data()); strcpy(req.password,password.toLocal8Bit().data()); //登录信息的内容检查+【加密】,发给服务端,我们再收报【解密】检查,做出相应的动作 /* 如果是正常连接,立即发送登录请求包 */ if(m_client){ qDebug()<<"LoginReq len :"<write((char *)&req,req.head.len); } } void Login::login_callback_slot(QString str) { ui->Label_error->setText(str); QMessageBox::information(this,"Server",str); }