/* 自定义头文件 */ #include "clientmainwindow.h" #include "ui_clientmainwindow.h" /* 系统头文键 */ #include /* 预处理指令·编译指示 */ #pragma execution_character_set("utf-8") /* 构造函数 */ ClientMainWindow::ClientMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::ClientMainWindow) { ui->setupUi(this); /* 初始化socket网络连接 */ m_client = new QTcpSocket(this); m_client->connectToHost("127.0.0.1",16888); if(m_client->waitForConnected()){ /* 连上之后,初始化其他界面,并且显示登录界面 */ init_Ui();//本来的位置 /* 统一定一个收包的槽 */ connect(m_client,SIGNAL(readyRead()),this,SLOT(readSlot())); } else { qDebug()<<"socket connect fail ! "; QMessageBox::critical(this,"网络错误","网络连接断开!"); /* 好用,很暴力的关闭,但是这里的情况就是需要它这样的 */ exit(0); } /* 测试的位置 */ //init_Ui(); } /* 析构函数 */ ClientMainWindow::~ClientMainWindow() { delete ui; } /* 进行有关ui的初始化 */ void ClientMainWindow::init_Ui() { /* 在ui设计界面,默认有两个页面,我们把他清除 */ ui->tabWidget->clear(); /* 页面菜单的点击效果 */ connect(ui->action_logout,SIGNAL(triggered(bool)),this,SLOT(action_logoutSlot())); connect(ui->action_exit,&QAction::triggered,this,[=]{close();});//退出 /* login界面,注意重载构造函数,把这个socket共享出去 */ m_loginUi = new Login(m_client,this); m_loginUi->show(); /* 添加子界面的地方 */ } /* 响应->登录业务 */ void ClientMainWindow::loginProcess(LoginRes *res) { /* 这里进行,登录业务的处理 */ /* 通过用户的权限,显示不同的回应结果 */ qDebug()<<"登录用户名:"<user_name);//res->user_name会乱码 qDebug()<<"用户ID:"<emp_id; qDebug()<<"状态:"<status; /* 先检查本次提交的用户登录信息的返回状态 */ /* 账户状态【0失败,1正常,2离职,3禁用,4注销】 */ if(res->status == 0){ /* 账户或者密码输入错误,向登录界面发送信号 */ QString str = "账户或者密码输入错误"; emit login_callback_signal(str); } else if(res->status == 1){ /* 切换时,一定要清空本界面的错误信息 */ ui->label_info->setText(""); /* 切换时,也要清空本界面的输入信息 */ /* 用户登录成功,向登录界面发送信号 */ QString str = "用户登录成功"; emit login_callback_signal(str); /* 根据权限,决定显示哪些界面 */ if(res->per.admin == 1){//超级用户 m_loginUi->hide(); this->show(); } else if(res->status == 2){//普通用户·具体个别权限独立控制 /* 先关闭登录界面 */ m_loginUi->hide(); if(res->per.attend_manage == 1){ // } if(res->per.device_manage == 1){ //醇哥? } if(res->per.history == 1){ // } if(res->per.image_input == 1){ // } if(res->per.log_search == 1){ // } if(res->per.map_change == 1){ // } if(res->per.monitor_back == 1){ // } if(res->per.notify_manage == 1){ // } if(res->per.version_manage == 1){ // } } } else if (res->status == 2) { /* 该用户已离职,向登录界面发送信号 */ QString str = "该用户已离职"; emit login_callback_signal(str); } else if (res->status == 3) { /* 该账号已禁用,向登录界面发送信号 */ QString str = "该账号已禁用"; emit login_callback_signal(str); } else if (res->status == 4) { /* 该账号已注销,向登录界面发送信号 */ QString str = "该账号已注销"; emit login_callback_signal(str); } } /* 响应->注册业务 */ void ClientMainWindow::registerProcess(RegisterRes *res) { if(res->emp_id == 0){//通过检查id,判断是否成功注册 /* 注册失败 */ QString str = QString::fromLocal8Bit(res->res_info); emit register_callback_signal(false,str,0); }else { /* 注册成功 */ QString str = "注册成功"; emit register_callback_signal(true,str,res->emp_id); } } /* 专门收包的槽 */ void ClientMainWindow::readSlot(){ QByteArray buffer = m_client->readAll();//这个函数,会一次性读取所有数据缓存 qDebug()<<"buffer size:"<type<<"bag length:"<len; /* 检查服务器发来的响应包的类型 */ if(res->type == LOGIN_RES){ LoginRes *res = (LoginRes *)buffer.data(); qDebug()<<"进入登录事务处理。。。"; loginProcess(res); } else if (res->type == REGISTER_RES) { RegisterRes *res = (RegisterRes *)buffer.data(); qDebug()<<"进入注册事务处理。。。"; registerProcess(res); } //else-if } /* 菜单栏·注销 */ void ClientMainWindow::action_logoutSlot() { this->hide(); m_loginUi->show(); /* 切换时,一定要清空本界面的错误信息 */ ui->label_info->setText(""); /* 切换时,也要清空本界面的输入信息 */ }