#include #include #include #include #include "iwebrequest.h" #include "WidgetLogon.h" #include "GlobalSetting.h" #include #include 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; }