diff --git a/NEU-Dectect.pro b/NEU-Dectect.pro index c8fcca5..56185a8 100644 --- a/NEU-Dectect.pro +++ b/NEU-Dectect.pro @@ -27,11 +27,13 @@ DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ main.cpp \ netcontroller.cpp \ - maintray.cpp + maintray.cpp \ + optionswindow.cpp HEADERS += \ netcontroller.h \ - maintray.h + maintray.h \ + optionswindow.h RESOURCES += \ resource.qrc diff --git a/main.cpp b/main.cpp index 2704b82..41d5cb1 100644 --- a/main.cpp +++ b/main.cpp @@ -5,9 +5,9 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - MainTray tray("",""); - QObject::connect(&tray, MainTray::exit, &a, QApplication::quit); - tray.show(); + MainTray *tray = new MainTray("",""); + QObject::connect(tray, MainTray::exit, &a, QApplication::quit); + tray->show(); return a.exec(); } diff --git a/maintray.cpp b/maintray.cpp index 7ad4cd6..c0c5bd4 100644 --- a/maintray.cpp +++ b/maintray.cpp @@ -3,10 +3,13 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): QSystemTrayIcon(parent), menu(new QMenu()), user(username),passwd(password) { + opWindow.hide(); setIcon(QIcon(tr(":/icon/favicon.ico"))); netctrl = new NetController(user,passwd,this); + connect(&opWindow, OptionsWindow::saveSettings, this, updataUserInfo); + //发送通知 connect(netctrl, NetController::getOnline, this, [this](){ showMessage(tr("网络已连接"),tr("校园网登陆成功"), this->icon(), msgDur);}); connect(netctrl, NetController::getOffline, this, [this](){ @@ -33,7 +36,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q isAutoLogin = set; netctrl->sendLoginRequest(); }); -// connect(optionsAction, QAction::triggered, this, [this]()); + connect(optionsAction, QAction::triggered, this, [this](){showOptions();}); connect(quitAction, QAction::triggered, this,[this](){emit exit();}); autoLogin->setChecked(true); @@ -41,6 +44,7 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q menu->addAction(loginAction); menu->addAction(logoutAction); menu->addAction(autoLogin); + menu->addAction(optionsAction); menu->addAction(quitAction); setContextMenu(menu); @@ -60,3 +64,16 @@ void MainTray::handleActivated(QSystemTrayIcon::ActivationReason reason) } } +void MainTray::showOptions() +{ + opWindow.show(); +} + +void MainTray::updataUserInfo(QByteArray id, QByteArray pass) +{ + netctrl->setUsername(id); + netctrl->setPassword(pass); + opWindow.hide(); + netctrl->sendLoginRequest(); +} + diff --git a/maintray.h b/maintray.h index 0d9a797..bfd89b6 100644 --- a/maintray.h +++ b/maintray.h @@ -6,6 +6,7 @@ #include #include #include +#include class MainTray: public QSystemTrayIcon { @@ -17,8 +18,10 @@ private: QMenu *menu; QAction *loginAction, *logoutAction, *autoLogin, *optionsAction, *quitAction; NetController *netctrl; + OptionsWindow opWindow; bool isAutoLogin = true; void handleActivated(QSystemTrayIcon::ActivationReason reason); + void showOptions(); QByteArray user, passwd; int msgDur = 500; @@ -27,6 +30,7 @@ signals: void exit(); private slots: + void updataUserInfo(QByteArray id, QByteArray pass); }; diff --git a/netcontroller.cpp b/netcontroller.cpp index 6bdfb16..9262815 100644 --- a/netcontroller.cpp +++ b/netcontroller.cpp @@ -5,24 +5,6 @@ NetController::NetController(QByteArray id, QByteArray passwd, QObject *parent) { checkParam.append("action=get_online_info"); - loginParam.append("action=login&"); - loginParam.append("nas_ip=&"); - loginParam.append("password="); - loginParam.append(password); - loginParam.append("&save_me=0&"); - loginParam.append("url=&"); - loginParam.append("user_ip=&"); - loginParam.append("user_mac=&"); - loginParam.append("username="); - loginParam.append(username); - - logoutParam.append("action=logout&"); - logoutParam.append("ajax=1&"); - logoutParam.append("password="); - logoutParam.append(password); - logoutParam.append("&username="); - logoutParam.append(username); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); connect(&manager, QNetworkAccessManager::finished, this, handleResponse); @@ -60,12 +42,34 @@ void NetController::sendCheckRequest() void NetController::sendLoginRequest() { request.setUrl(QUrl(loginUrl)); + + QByteArray loginParam; + loginParam.append("action=login&"); + loginParam.append("nas_ip=&"); + loginParam.append("password="); + loginParam.append(password); + loginParam.append("&save_me=0&"); + loginParam.append("url=&"); + loginParam.append("user_ip=&"); + loginParam.append("user_mac=&"); + loginParam.append("username="); + loginParam.append(username); + manager.post(request, loginParam); } void NetController::sendLogoutRequest() { request.setUrl(QUrl(loginUrl)); + + QByteArray logoutParam; + logoutParam.append("action=logout&"); + logoutParam.append("ajax=1&"); + logoutParam.append("password="); + logoutParam.append(password); + logoutParam.append("&username="); + logoutParam.append(username); + manager.post(request, logoutParam); } diff --git a/netcontroller.h b/netcontroller.h index 6f3529c..b792e09 100644 --- a/netcontroller.h +++ b/netcontroller.h @@ -17,13 +17,16 @@ public: void sendLoginRequest(); void sendLogoutRequest(); + void setUsername(QByteArray newName) { username = newName; } + void setPassword(QByteArray newPass) { password = newPass; } + enum Status {Offline, Online, Disconnected}; private: QString checkUrl = "http://ipgw.neu.edu.cn/include/auth_action.php"; QString loginUrl = "http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1&"; QString offlineString = "not_online"; - QByteArray checkParam, loginParam, logoutParam, username, password; + QByteArray checkParam, username, password; Status NEUStatus, flag; QNetworkAccessManager manager; diff --git a/optionswindow.cpp b/optionswindow.cpp new file mode 100644 index 0000000..bf3741d --- /dev/null +++ b/optionswindow.cpp @@ -0,0 +1,28 @@ +#include "optionswindow.h" + +OptionsWindow::OptionsWindow(QWidget *parent) : QWidget(parent) +{ + vlayout = new QVBoxLayout(this); + layout = new QFormLayout(); + hlayout = new QHBoxLayout(); + + idEdit = new QLineEdit(this); + passwordEdit = new QLineEdit(this); + passwordEdit->setEchoMode(QLineEdit::Password); + + layout->addRow(tr("用户名"), idEdit); + layout->addRow(tr("密码"), passwordEdit); + + saveButton = new QPushButton("确定", this); + cancleButton = new QPushButton("取消", this); + hlayout->addWidget(saveButton); + hlayout->addWidget(cancleButton); + + vlayout->addLayout(layout); + vlayout->addLayout(hlayout); + + setLayout(vlayout); + + connect(saveButton, QPushButton::clicked, this, [this](){emit saveSettings(idEdit->text().toUtf8(), passwordEdit->text().toUtf8());}); + connect(cancleButton, QPushButton::clicked, this, hide); +} diff --git a/optionswindow.h b/optionswindow.h new file mode 100644 index 0000000..7d8cc65 --- /dev/null +++ b/optionswindow.h @@ -0,0 +1,28 @@ +#ifndef OPTIONSWINDOW_H +#define OPTIONSWINDOW_H + +#include +#include +#include +#include +#include + +class OptionsWindow : public QWidget +{ + Q_OBJECT +public: + explicit OptionsWindow(QWidget *parent = nullptr); + +private: + QLineEdit *idEdit, *passwordEdit; + QPushButton *saveButton, *cancleButton; + QFormLayout *layout; + QVBoxLayout *vlayout; + QHBoxLayout *hlayout; + +signals: + void saveSettings(QByteArray id, QByteArray pass); +public slots: +}; + +#endif // OPTIONSWINDOW_H