/* 自定义头文件 */
|
#include "clientmainwindow.h"
|
#include "ui_clientmainwindow.h"
|
|
/* 系统头文键 */
|
#include <QMessageBox>
|
|
/* 预处理指令·编译指示 */
|
#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()<<"登录用户名:"<<QString::fromLocal8Bit(res->user_name);//res->user_name会乱码
|
qDebug()<<"用户ID:"<<res->emp_id;
|
qDebug()<<"状态:"<<res->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:"<<buffer.size()<<endl<<"buffer:"<<buffer;
|
|
/* 强制转换解包 */
|
Head *res = (Head *)buffer.data();
|
qDebug()<<" bag type:"<<res->type<<"bag length:"<<res->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("");
|
/* 切换时,也要清空本界面的输入信息 */
|
}
|