From 3544e83608c5f531420b9f9574f63f21e2d71a10 Mon Sep 17 00:00:00 2001 From: "Cai.MY" Date: Thu, 28 Jun 2018 00:22:57 +0800 Subject: [PATCH] combobox --- maintray.cpp | 29 ++++++++++++++++------------- maintray.h | 1 + optionswindow.cpp | 23 +++++++++++++++++------ optionswindow.h | 7 ++++++- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/maintray.cpp b/maintray.cpp index d65eb9e..b24dae1 100644 --- a/maintray.cpp +++ b/maintray.cpp @@ -57,6 +57,15 @@ MainTray::MainTray(QByteArray username, QByteArray password, QObject *parent): Q balanceAction = new QAction(tr("账户余额: "),this); ipAction = new QAction(tr("IP地址: "),this); + connect(ipAction, QAction::triggered, this, [this](){ + QStringList ipList = ipAction->text().split('\t'); + if(ipList.size()>1) + { + QClipboard *clipBoard = QApplication::clipboard(); + clipBoard->setText(ipList.at(1)); + } + }); + autoLogin->setCheckable(true); bootAction->setCheckable(true); muteAction->setCheckable(true); @@ -153,10 +162,10 @@ void MainTray::showToolTip(NetController::State state) QString tooltipString; switch (state) { case NetController::Online: - tooltipString += tr("当前状态:连接"); + tooltipString += tr("当前状态:在线"); break; case NetController::Offline: - tooltipString += tr("当前状态:断开(双击登陆)"); + tooltipString += tr("当前状态:断开(双击登陆)"); break; case NetController::Disconnected: tooltipString += tr("当前状态:无法连接"); @@ -301,8 +310,6 @@ void MainTray::handleState(NetController::State state) setIcon(QIcon(olIconPath)); if(!muteAction->isChecked()) showMessage(tr("网络已连接"),tr("校园网登陆成功"), this->icon(), msgDur); - loginAction->setEnabled(true); - logoutAction->setEnabled(true); currentState = state; } break; @@ -316,8 +323,6 @@ void MainTray::handleState(NetController::State state) setIcon(QIcon(offIconPath)); if(!muteAction->isChecked()) showMessage(tr("网络已断开"),tr("校园网已注销"), this->icon(), msgDur); - loginAction->setEnabled(true); - logoutAction->setEnabled(true); //自动登陆 if(autoLogin->isChecked() && !isForceLogout){ loginAction->trigger(); @@ -333,8 +338,6 @@ void MainTray::handleState(NetController::State state) setIcon(QIcon(offIconPath)); if(!muteAction->isChecked()) showMessage(tr("网络已断开"),tr("无法连接至校园网"), this->icon(), msgDur); - loginAction->setDisabled(true); - logoutAction->setDisabled(true); currentState = state; } break; @@ -365,15 +368,15 @@ void MainTray::handleInfo(QString byte, QString sec, QString balance, QString ip QString mbString = QString::number(byte.toDouble()/1048576.0, 'f', 2); QString gbString = QString::number(byte.toDouble()/1000000000.0, 'f', 2); QString leftoverString = QString::number(totalTraffic - byte.toDouble()/1000000000.0, 'f',2 ); - int totalSec = sec.toInt(); - int hour = (totalSec/3600); + double totalSec = sec.toDouble(); + double hour = (totalSec/3600); int min = ((totalSec-hour*3600)/60); QString second = QString::number(totalSec-hour*3600-min*60); mbAction->setText(tr("已用流量:\t") + mbString + tr(" M")); - timeAction->setText(tr("已用时长:\t") + QString::number(hour) + ":" +QString::number(min) + ":" + second); - balanceAction->setText(tr("账户余额:\t") + balance); + timeAction->setText(tr("已用时长:\t") + QString::number(hour, 'f', 2) + tr(" 小时")/*+ ":" +QString::number(min) + ":" + second*/); + balanceAction->setText(tr("账户余额:\t") + balance + tr(" 元")); ipAction->setText(tr("IP地址:\t") + ip); - if(!hasWarned){ + if(!hasWarned && totalTraffic <= 0){ hasWarned = true; if(byte.toDouble() / 1048576.0 > totalTraffic * 1024){//流量已超 trafficstate = Over; diff --git a/maintray.h b/maintray.h index f9beb4c..63d9d9c 100644 --- a/maintray.h +++ b/maintray.h @@ -13,6 +13,7 @@ #include #include #include +#include class MainTray: public QSystemTrayIcon { diff --git a/optionswindow.cpp b/optionswindow.cpp index ed8788f..c1d9890 100644 --- a/optionswindow.cpp +++ b/optionswindow.cpp @@ -11,24 +11,35 @@ OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, int traffic, QWidg layout = new QFormLayout(); hlayout = new QHBoxLayout(); - idEdit = new QLineEdit(this); - idEdit->setText(id); + + idCombo = new QComboBox(this); + idCombo->setEditable(true); + idCombo->addItem(id); + idCombo->setCurrentText(id); + passwordEdit = new QLineEdit(this); passwordEdit->setEchoMode(QLineEdit::Password); passwordEdit->setContextMenuPolicy(Qt::NoContextMenu); passwordEdit->setText(pass); + passwordEdit->setToolTip(tr("密码仅用于登陆")); + trafficSpin = new QSpinBox(this); trafficSpin->setValue(traffic); - trafficSpin->setToolTip(tr("在流量将要用尽时进行提醒")); + trafficSpin->setToolTip(tr("0为无限制")); - layout->addRow(tr("用户名"), idEdit); + trafficLabel = new QLabel(tr("流量(G)"), this); + trafficLabel->setToolTip(tr("在流量将要用尽时进行提醒")); + + layout->addRow(tr("用户名"), /*idEdit*/idCombo); +// layout->addRow(idCombo); layout->addRow(tr("密码"), passwordEdit); - layout->addRow(tr("流量(G)"), trafficSpin); + layout->addRow(trafficLabel, trafficSpin); layout->setSpacing(20); saveButton = new QPushButton("确定", this); saveButton->setDefault(true); + saveButton->setToolTip(tr("保存设置并关闭")); cancleButton = new QPushButton("取消", this); cancleButton->setShortcut(Qt::Key_Escape); hlayout->addWidget(saveButton); @@ -43,7 +54,7 @@ OptionsWindow::OptionsWindow(QByteArray id, QByteArray pass, int traffic, QWidg tabWidget->addTab(page1, tr("常规")); setCentralWidget(tabWidget); - connect(saveButton, QPushButton::clicked, this, [this](){emit saveSettings(idEdit->text().toUtf8(), + connect(saveButton, QPushButton::clicked, this, [this](){emit saveSettings(idCombo->currentText().toUtf8(), passwordEdit->text().toUtf8(), trafficSpin->value()); }); diff --git a/optionswindow.h b/optionswindow.h index 9ebe253..6b2677f 100644 --- a/optionswindow.h +++ b/optionswindow.h @@ -9,7 +9,9 @@ #include #include #include +#include #include +#include class OptionsWindow : public QMainWindow { @@ -20,13 +22,16 @@ public: private: QTabWidget *tabWidget; QWidget *page1; - QLineEdit *idEdit, *passwordEdit; + QComboBox *idCombo; + QLineEdit *passwordEdit; QSpinBox *trafficSpin; QPushButton *saveButton, *cancleButton; QFormLayout *layout; QVBoxLayout *vlayout; QHBoxLayout *hlayout; + QLabel *trafficLabel; + signals: void saveSettings(QByteArray id, QByteArray pass, int traffic); public slots: