widgetLogon.cpp 9.61 KB
#include <QMenu>
#include <QMovie>
#include <QMouseEvent>
#include <QMessageBox>
#include "iwebrequest.h"
#include "WidgetLogon.h"
#include "GlobalSetting.h"
#include <QSettings>
#include <regex>

bool isLoginSuccess = false;//是否登录
WidgetLogon::WidgetLogon(QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags)
{
	m_ui.setupUi( this );
    setWindowFlags( Qt::FramelessWindowHint | Qt::Window);
//    setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏
    setAttribute( Qt::WA_TranslucentBackground, true );
	show();

    m_ui.btnLogonCancel->hide();
    m_ui.labelLoading->hide();
    m_ui.labelLoading->setAlignment(Qt::AlignCenter);


    m_ui.lineEdit_UserName->installEventFilter(this);
    m_ui.lineEdit_UserName->setPlaceholderText("E-mail");
    m_ui.lineEdit_PassWord->installEventFilter(this);
    m_ui.lineEdit_PassWord->setPlaceholderText("Password");


    m_LoadingTimer = new QTimer(this);
    m_LoadingOut = new QTimer(this);
    m_LoadingOut->setSingleShot(true);
    //自动登录
    connect(m_ui.checkBox_2, SIGNAL(clicked()), SLOT(changeAutoLogin()));
    connect(m_LoadingOut, SIGNAL(timeout()), SLOT(lodingTimerOut()));
    connect(m_LoadingTimer, SIGNAL(timeout()), SLOT(lodingGifTimerOut()));
    //登陆错误
    connect(IWebRequest::Instance(), SIGNAL(errorConnect(QString)), SLOT(on_Logon_failed(QString)));
//    connect(IWebRequest::Instance(), SIGNAL(response(int,int,QString,QString)), this, SLOT(doResponse(int,int,QString,QString)));
    m_LoadingTimer->setInterval(200);

    m_LoadingCount = 0;

    m_ui.btnLogon->setFocus();


}

void WidgetLogon::doResponse(int cmd,int errorId,QString,QString)
{
    qDebug() << "void WidgetLogon::doResponse" << cmd;
    switch(cmd)
    {
    case REQ_LOGIN:
        {
//            loginMessage(errorId);
        }
        break;

    default:
        break;
    }

}

void WidgetLogon::loginMessage(int error)
{
    if(m_LoadingOut->isActive())
        m_LoadingOut->stop();
    if(error == 0)
    {
        m_ui.widgetLogo->move(m_ui.widgetLogo->x(), 60);
        this->hide();
        writeConfig();
        emit loginSuccess();
        isLoginSuccess = true;
    }
    else
        on_btnLogonCancel_clicked();
    qDebug("CMQ loginMessage....%d....\n",error);
}

WidgetLogon::~WidgetLogon()
{

}
void WidgetLogon::changeRemember()
{
    //m_ui.pushButton->setChecked(!m_ui.pushButton->isChecked());
}

void WidgetLogon::changeAutoLogin()
{

    if(m_ui.checkBox_2->isChecked())
        m_ui.checkBox->setChecked(true);
//    qDebug("CMQ loginMessage....changeAutoLogin....\n");
}

void WidgetLogon::readConfig()
{
    QString filename = QCoreApplication::applicationDirPath() + QString("/config/userConfig.ini");
    //Qt中使用QSettings类读写ini文件
    //QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
    QSettings *configIniRead = new QSettings(filename, QSettings::IniFormat);
    //向ini文件中写入内容,setValue函数的两个参数是键值对
    QString Remember = configIniRead->value("/user/Remember").toString();
    QString username = configIniRead->value("/user/username").toString();
    QString password = configIniRead->value("/user/password").toString();
    QString AutoLogin = configIniRead->value("/user/AutoLogin").toString();
    if(Remember.toInt())
    {
        m_ui.lineEdit_UserName->setText(username);
        m_ui.lineEdit_PassWord->setText(password);
        m_ui.checkBox->setChecked(true);
        if(AutoLogin.toInt())
        {
            on_btnLogon_clicked();
            m_ui.checkBox_2->setChecked(true);
        }
    }
    else
    {
        m_ui.lineEdit_UserName->setText(username);
    }
    //写入完成后删除指针
    delete configIniRead;
}

void WidgetLogon::writeConfig()
{
    QString filename = QCoreApplication::applicationDirPath() + QString("/config/userConfig.ini");
    //Qt中使用QSettings类读写ini文件
    //QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
    QSettings *configIniWrite = new QSettings(filename, QSettings::IniFormat);
    //向ini文件中写入内容,setValue函数的两个参数是键值对
    if(m_ui.checkBox->isChecked())
    {
        configIniWrite->setValue("user/Remember", 1);
        //向ini文件的第一个节写入内容,ip节下的第一个参数
        configIniWrite->setValue("/user/username", m_ui.lineEdit_UserName->text());
        //向ini文件的第一个节写入内容,ip节下的第二个参数
        configIniWrite->setValue("user/password", m_ui.lineEdit_PassWord->text());
        //向ini文件的第二个节写入内容,port节下的第一个参数
        if(m_ui.checkBox_2->isChecked())
            configIniWrite->setValue("user/AutoLogin", 1);
        else
            configIniWrite->setValue("user/AutoLogin", 0);
    }
    else
    {
        configIniWrite->setValue("user/Remember", 0);
        //向ini文件的第一个节写入内容,ip节下的第一个参数
        configIniWrite->setValue("/user/username", m_ui.lineEdit_UserName->text());
        //向ini文件的第一个节写入内容,ip节下的第二个参数
        configIniWrite->setValue("user/password", m_ui.lineEdit_PassWord->text());
        //向ini文件的第二个节写入内容,port节下的第一个参数
        configIniWrite->setValue("user/AutoLogin", 0);
    }
    //写入完成后删除指针
    delete configIniWrite;
}

void WidgetLogon::lodingGifTimerOut()
{
    m_ui.widgetLogo->setPixmap(QPixmap(QString(":Images/Loading/loading000%1.png").arg(m_LoadingCount++)));
    if(m_LoadingCount >= 10)
    {
        m_LoadingCount = 0;
    }
}

void WidgetLogon::lodingTimerOut()
{
    on_Logon_failed(QString("Network error. Please check your connection."));
}


void WidgetLogon::loadingLogo()
{
    if(!m_LoadingTimer->isActive())
        m_LoadingTimer->start();

    m_ui.widgetLogo->move(m_ui.widgetLogo->x(), 105);
//    QMovie * m = NULL;
//    if(!_GlobalSetting.g_MovieMap.contains("m_login_logo"))
//    {
//        m = new QMovie();
//        m->setFileName(":/Images/Logon/loading.gif");
//        _GlobalSetting.g_MovieMap["m_login_logo"] =  m;
//    }
//    if(m != NULL)
//    {
//        m_ui.widgetLogo->setMovie(m);
//        m->start();
//    }
    m_ui.widget->hide();
    m_ui.btnLogonCancel->show();
    m_ui.labelLoading->show();

}

static void ChMessageOnlyOk_Error(QString info)
{
    QMessageBox msg;
    msg.setWindowTitle("Warning");
    msg.setText(info);
    msg.setStyleSheet("font: 10pt;background-color:rgb(255, 255, 255)");
    msg.setIcon(QMessageBox::Critical);
    msg.addButton("OK",QMessageBox::ActionRole);
    msg.exec();
}


bool fun(char *addr)
{
    QString pattern("^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}");
    QRegExp rx(pattern);
    if(rx.exactMatch(QString(addr)))
    {
//        qDebug("fun email.....1..\n");
        return true;
    }
    else
    {
//        qDebug("fun email.....0..\n");
        return false;
    }
}

void WidgetLogon::on_btnLogon_clicked()
{
    qDebug() << "on_btnLogon_clicked";
    QStringList params;
    if(m_ui.lineEdit_UserName->text().length() > 0)
        params <<  m_ui.lineEdit_UserName->text();
    else
    {
        ChMessageOnlyOk_Error("Please input your email.");
        return;
    }
    if(m_ui.lineEdit_PassWord->text().length() > 0)
        params <<  m_ui.lineEdit_PassWord->text();
    else
    {
        ChMessageOnlyOk_Error("Please input your password.");
        return;
    }
    if(fun(params.at(0).toLatin1().data()))
    {
        params <<  "1.7";
        IWebRequest::Instance()->sendRequestToServer(REQ_LOGIN, params);
    }
    else
    {
        ChMessageOnlyOk_Error(QString("E-mail error!!!"));
        on_btnLogonCancel_clicked();
        return;
    }
    loadingLogo();
    m_LoadingOut->start(60*1000);
    qDebug("on_btnLogon_clicked...%s\n",params.at(0).toLatin1().data());
}

 void WidgetLogon::on_Logon_failed(QString Msg) //登录错误
 {
    qDebug("on_Logon_failed...%s\n",Msg.toLatin1().data());
    on_btnLogonCancel_clicked();
    ChMessageOnlyOk_Error(Msg);
 }

void WidgetLogon::on_btnLogonCancel_clicked()
{
    m_ui.widgetLogo->move(m_ui.widgetLogo->x(), 60);
    QMovie *m = m_ui.widgetLogo->movie();
    if(m != NULL && m->isValid())
    {
        m->stop();
    }
    m_ui.widgetLogo->setPixmap(QPixmap(":Images/Logon/logo_teacher.png"));
    m_ui.widget->show();
    m_ui.btnLogonCancel->hide();
    m_ui.labelLoading->hide();
    this->show();
    if(m_LoadingOut->isActive())
        m_LoadingOut->stop();
}

void WidgetLogon::on_btnClose_clicked()
{
    this->close();
    qApp->exit(1);
}

void WidgetLogon::on_btnMin_clicked()
{
    this->showMinimized();
//    this->raise();
    this->update();
}

void WidgetLogon::mousePressEvent( QMouseEvent *event )
{
	m_PointWindow = event->globalPos() - pos();
}

void WidgetLogon::mouseMoveEvent( QMouseEvent *event )
{
	move( event->globalPos() - m_PointWindow );
}

bool WidgetLogon::eventFilter(QObject *obj, QEvent *event)
{
    if(obj->objectName() == "lineEdit_UserName" && event->type() == QEvent::Enter)
    {
        QString style = m_ui.lineEdit_PassWord->styleSheet().replace("QLineEdit{border-top-width: 1px;margin-top:0px;", "QLineEdit{border-top-width: 1px;margin-top:-1px;");
        m_ui.lineEdit_PassWord->setStyleSheet(style);
    }
    else if(obj->objectName() == "lineEdit_UserName" && event->type() == QEvent::Leave)
    {
        QString style = m_ui.lineEdit_PassWord->styleSheet().replace("QLineEdit{border-top-width: 1px;margin-top:-1px;", "QLineEdit{border-top-width: 1px;margin-top:0px;");
        m_ui.lineEdit_PassWord->setStyleSheet(style);
    }
    return false;
}