first commit
This commit is contained in:
790
widgets/wirelesswidget.cpp
Normal file
790
widgets/wirelesswidget.cpp
Normal file
@@ -0,0 +1,790 @@
|
||||
#include "wirelesswidget.h"
|
||||
#include "overlaydialogswidget.h"
|
||||
#include <QScrollArea>
|
||||
#include <QDebug>
|
||||
|
||||
// 样式常量定义
|
||||
const QString WirelessWidget::BUTTON_STYLE = R"(
|
||||
QPushButton {
|
||||
background-color: #f5f5f5;
|
||||
color: #333333;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
min-height: 36px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #e8e8e8;
|
||||
border-color: #ccc;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #d0d0d0;
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::PRIMARY_BUTTON_STYLE = R"(
|
||||
QPushButton {
|
||||
background-color: #2196F3;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
min-height: 36px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #1976D2;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #1565C0;
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::DANGER_BUTTON_STYLE = R"(
|
||||
QPushButton {
|
||||
background-color: #f44336;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
min-height: 36px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #d32f2f;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #c62828;
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::INPUT_STYLE = R"(
|
||||
QLineEdit, QComboBox {
|
||||
background-color: white;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 6px;
|
||||
padding: 8px 12px;
|
||||
font-size: 14px;
|
||||
min-height: 36px;
|
||||
}
|
||||
QLineEdit:focus, QComboBox:focus {
|
||||
border-color: #2196F3;
|
||||
}
|
||||
QComboBox::drop-down {
|
||||
subcontrol-origin: padding;
|
||||
subcontrol-position: center right;
|
||||
width: 30px;
|
||||
border: none;
|
||||
}
|
||||
QComboBox::down-arrow {
|
||||
image: url(:/icons/arrow_down.svg);
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::GROUP_STYLE = R"(
|
||||
QGroupBox {
|
||||
background-color: white;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 8px;
|
||||
margin-top: 16px;
|
||||
padding-top: 16px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QGroupBox::title {
|
||||
subcontrol-origin: margin;
|
||||
left: 16px;
|
||||
padding: 0 8px;
|
||||
color: #333;
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::TAB_STYLE = R"(
|
||||
QPushButton {
|
||||
background-color: transparent;
|
||||
color: #666;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
padding: 12px 24px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
min-width: 100px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
color: #2196F3;
|
||||
background-color: rgba(33, 150, 243, 0.05);
|
||||
}
|
||||
)";
|
||||
|
||||
const QString WirelessWidget::TAB_ACTIVE_STYLE = R"(
|
||||
QPushButton {
|
||||
background-color: transparent;
|
||||
color: #2196F3;
|
||||
border: none;
|
||||
border-bottom: 2px solid #2196F3;
|
||||
padding: 12px 24px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
min-width: 100px;
|
||||
}
|
||||
)";
|
||||
|
||||
WirelessWidget::WirelessWidget(QWidget *parent)
|
||||
: QWidget(parent), m_currentTab(0)
|
||||
{
|
||||
setupUI();
|
||||
|
||||
// 初始化状态刷新定时器
|
||||
m_statusTimer = new QTimer(this);
|
||||
connect(m_statusTimer, &QTimer::timeout, this, &WirelessWidget::onRefreshStatus);
|
||||
m_statusTimer->start(5000); // 每5秒刷新一次
|
||||
|
||||
// 初始刷新
|
||||
onRefreshStatus();
|
||||
}
|
||||
|
||||
void WirelessWidget::setupUI()
|
||||
{
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
||||
mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||
mainLayout->setSpacing(0);
|
||||
|
||||
// 标题栏
|
||||
mainLayout->addWidget(createTitleBar());
|
||||
|
||||
// Tab栏
|
||||
mainLayout->addWidget(createTabBar());
|
||||
|
||||
// 内容区域(滚动区域)
|
||||
QScrollArea *scrollArea = new QScrollArea;
|
||||
scrollArea->setWidgetResizable(true);
|
||||
scrollArea->setFrameShape(QFrame::NoFrame);
|
||||
scrollArea->setStyleSheet("QScrollArea { background-color: #f5f5f5; }");
|
||||
|
||||
m_contentStack = new QStackedWidget;
|
||||
m_contentStack->addWidget(createWifiPanel());
|
||||
m_contentStack->addWidget(create4GPanel());
|
||||
m_contentStack->addWidget(createStatusPanel());
|
||||
|
||||
scrollArea->setWidget(m_contentStack);
|
||||
mainLayout->addWidget(scrollArea, 1);
|
||||
|
||||
// 默认显示WiFi面板
|
||||
onTabChanged(0);
|
||||
}
|
||||
|
||||
QWidget *WirelessWidget::createTitleBar()
|
||||
{
|
||||
QWidget *titleBar = new QWidget;
|
||||
titleBar->setFixedHeight(60);
|
||||
titleBar->setStyleSheet("background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #1976D2, stop:1 #1565C0);");
|
||||
|
||||
QHBoxLayout *layout = new QHBoxLayout(titleBar);
|
||||
layout->setContentsMargins(16, 0, 16, 0);
|
||||
|
||||
// 返回按钮
|
||||
m_backBtn = new QPushButton("← 返回");
|
||||
m_backBtn->setCursor(Qt::PointingHandCursor);
|
||||
m_backBtn->setStyleSheet(R"(
|
||||
QPushButton {
|
||||
background: rgba(255,255,255,0.2);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
padding: 8px 16px;
|
||||
font-size: 14px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background: rgba(255,255,255,0.3);
|
||||
}
|
||||
)");
|
||||
connect(m_backBtn, &QPushButton::clicked, this, &WirelessWidget::backRequested);
|
||||
layout->addWidget(m_backBtn);
|
||||
|
||||
// 标题(居中)
|
||||
m_titleLabel = new QLabel("无线通讯");
|
||||
m_titleLabel->setStyleSheet("color: white; font-size: 18px; font-weight: bold;");
|
||||
m_titleLabel->setAlignment(Qt::AlignCenter);
|
||||
layout->addWidget(m_titleLabel, 1);
|
||||
|
||||
// 右侧占位,保持标题居中
|
||||
QWidget *spacer = new QWidget;
|
||||
spacer->setFixedWidth(m_backBtn->sizeHint().width());
|
||||
layout->addWidget(spacer);
|
||||
|
||||
return titleBar;
|
||||
}
|
||||
|
||||
QWidget *WirelessWidget::createTabBar()
|
||||
{
|
||||
QWidget *tabBar = new QWidget;
|
||||
tabBar->setFixedHeight(48);
|
||||
tabBar->setStyleSheet("background-color: white; border-bottom: 1px solid #e0e0e0;");
|
||||
|
||||
QHBoxLayout *layout = new QHBoxLayout(tabBar);
|
||||
layout->setContentsMargins(16, 0, 16, 0);
|
||||
layout->setSpacing(0);
|
||||
|
||||
QStringList tabNames = {"WiFi", "4G网络", "连接状态"};
|
||||
for (int i = 0; i < tabNames.size(); ++i)
|
||||
{
|
||||
QPushButton *tabBtn = new QPushButton(tabNames[i]);
|
||||
tabBtn->setStyleSheet(i == 0 ? TAB_ACTIVE_STYLE : TAB_STYLE);
|
||||
tabBtn->setCursor(Qt::PointingHandCursor);
|
||||
connect(tabBtn, &QPushButton::clicked, this, [this, i]()
|
||||
{ onTabChanged(i); });
|
||||
layout->addWidget(tabBtn);
|
||||
m_tabButtons.append(tabBtn);
|
||||
}
|
||||
|
||||
layout->addStretch();
|
||||
|
||||
return tabBar;
|
||||
}
|
||||
|
||||
QWidget *WirelessWidget::createWifiPanel()
|
||||
{
|
||||
QWidget *panel = new QWidget;
|
||||
panel->setStyleSheet("background-color: #f5f5f5;");
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(panel);
|
||||
layout->setContentsMargins(20, 20, 20, 20);
|
||||
layout->setSpacing(16);
|
||||
|
||||
// WiFi列表区域
|
||||
QGroupBox *listGroup = new QGroupBox("可用网络");
|
||||
listGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *listLayout = new QVBoxLayout(listGroup);
|
||||
listLayout->setContentsMargins(16, 24, 16, 16);
|
||||
listLayout->setSpacing(12);
|
||||
|
||||
// 扫描按钮
|
||||
QHBoxLayout *scanLayout = new QHBoxLayout;
|
||||
m_wifiScanBtn = new QPushButton("扫描网络");
|
||||
m_wifiScanBtn->setStyleSheet(PRIMARY_BUTTON_STYLE);
|
||||
m_wifiScanBtn->setFixedWidth(120);
|
||||
m_wifiScanBtn->setCursor(Qt::PointingHandCursor);
|
||||
connect(m_wifiScanBtn, &QPushButton::clicked, this, &WirelessWidget::onWifiScan);
|
||||
scanLayout->addWidget(m_wifiScanBtn);
|
||||
scanLayout->addStretch();
|
||||
listLayout->addLayout(scanLayout);
|
||||
|
||||
// WiFi列表
|
||||
m_wifiList = new QListWidget;
|
||||
m_wifiList->setFixedHeight(200);
|
||||
m_wifiList->setStyleSheet(R"(
|
||||
QListWidget {
|
||||
background-color: white;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 6px;
|
||||
font-size: 14px;
|
||||
}
|
||||
QListWidget::item {
|
||||
padding: 12px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
QListWidget::item:selected {
|
||||
background-color: #e3f2fd;
|
||||
color: #1976D2;
|
||||
}
|
||||
QListWidget::item:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
)");
|
||||
connect(m_wifiList, &QListWidget::itemClicked, this, &WirelessWidget::onWifiItemClicked);
|
||||
listLayout->addWidget(m_wifiList);
|
||||
|
||||
layout->addWidget(listGroup);
|
||||
|
||||
// 连接设置区域
|
||||
QGroupBox *connectGroup = new QGroupBox("连接设置");
|
||||
connectGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *connectLayout = new QVBoxLayout(connectGroup);
|
||||
connectLayout->setContentsMargins(16, 24, 16, 16);
|
||||
connectLayout->setSpacing(12);
|
||||
|
||||
// 密码输入
|
||||
QHBoxLayout *passwordLayout = new QHBoxLayout;
|
||||
QLabel *passwordLabel = new QLabel("密码:");
|
||||
passwordLabel->setFixedWidth(60);
|
||||
passwordLabel->setStyleSheet("font-size: 14px; color: #333;");
|
||||
passwordLayout->addWidget(passwordLabel);
|
||||
|
||||
m_wifiPasswordEdit = new QLineEdit;
|
||||
m_wifiPasswordEdit->setStyleSheet(INPUT_STYLE);
|
||||
m_wifiPasswordEdit->setEchoMode(QLineEdit::Password);
|
||||
m_wifiPasswordEdit->setPlaceholderText("输入WiFi密码");
|
||||
passwordLayout->addWidget(m_wifiPasswordEdit, 1);
|
||||
connectLayout->addLayout(passwordLayout);
|
||||
|
||||
// 连接状态
|
||||
QHBoxLayout *statusLayout = new QHBoxLayout;
|
||||
QLabel *statusTitle = new QLabel("状态:");
|
||||
statusTitle->setFixedWidth(60);
|
||||
statusTitle->setStyleSheet("font-size: 14px; color: #333;");
|
||||
statusLayout->addWidget(statusTitle);
|
||||
|
||||
m_wifiStatusLabel = new QLabel("未连接");
|
||||
m_wifiStatusLabel->setStyleSheet("font-size: 14px; color: #f44336;");
|
||||
statusLayout->addWidget(m_wifiStatusLabel);
|
||||
statusLayout->addStretch();
|
||||
connectLayout->addLayout(statusLayout);
|
||||
|
||||
// 信号强度
|
||||
QHBoxLayout *signalLayout = new QHBoxLayout;
|
||||
QLabel *signalTitle = new QLabel("信号:");
|
||||
signalTitle->setFixedWidth(60);
|
||||
signalTitle->setStyleSheet("font-size: 14px; color: #333;");
|
||||
signalLayout->addWidget(signalTitle);
|
||||
|
||||
m_wifiSignalBar = new QProgressBar;
|
||||
m_wifiSignalBar->setFixedHeight(10);
|
||||
m_wifiSignalBar->setRange(0, 100);
|
||||
m_wifiSignalBar->setValue(0);
|
||||
m_wifiSignalBar->setTextVisible(false);
|
||||
m_wifiSignalBar->setStyleSheet(R"(
|
||||
QProgressBar {
|
||||
background-color: #e0e0e0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #4CAF50;
|
||||
border-radius: 5px;
|
||||
}
|
||||
)");
|
||||
signalLayout->addWidget(m_wifiSignalBar, 1);
|
||||
connectLayout->addLayout(signalLayout);
|
||||
|
||||
// 操作按钮
|
||||
QHBoxLayout *buttonLayout = new QHBoxLayout;
|
||||
buttonLayout->addStretch();
|
||||
|
||||
m_wifiDisconnectBtn = new QPushButton("断开连接");
|
||||
m_wifiDisconnectBtn->setStyleSheet(DANGER_BUTTON_STYLE);
|
||||
m_wifiDisconnectBtn->setFixedWidth(100);
|
||||
m_wifiDisconnectBtn->setCursor(Qt::PointingHandCursor);
|
||||
m_wifiDisconnectBtn->setEnabled(false);
|
||||
connect(m_wifiDisconnectBtn, &QPushButton::clicked, this, &WirelessWidget::onWifiDisconnect);
|
||||
buttonLayout->addWidget(m_wifiDisconnectBtn);
|
||||
|
||||
m_wifiConnectBtn = new QPushButton("连接");
|
||||
m_wifiConnectBtn->setStyleSheet(PRIMARY_BUTTON_STYLE);
|
||||
m_wifiConnectBtn->setFixedWidth(100);
|
||||
m_wifiConnectBtn->setCursor(Qt::PointingHandCursor);
|
||||
connect(m_wifiConnectBtn, &QPushButton::clicked, this, &WirelessWidget::onWifiConnect);
|
||||
buttonLayout->addWidget(m_wifiConnectBtn);
|
||||
|
||||
connectLayout->addLayout(buttonLayout);
|
||||
layout->addWidget(connectGroup);
|
||||
|
||||
layout->addStretch();
|
||||
|
||||
// 添加模拟WiFi数据
|
||||
updateWifiList();
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
QWidget *WirelessWidget::create4GPanel()
|
||||
{
|
||||
QWidget *panel = new QWidget;
|
||||
panel->setStyleSheet("background-color: #f5f5f5;");
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(panel);
|
||||
layout->setContentsMargins(20, 20, 20, 20);
|
||||
layout->setSpacing(16);
|
||||
|
||||
// SIM卡状态
|
||||
QGroupBox *simGroup = new QGroupBox("SIM卡状态");
|
||||
simGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *simLayout = new QVBoxLayout(simGroup);
|
||||
simLayout->setContentsMargins(16, 24, 16, 16);
|
||||
simLayout->setSpacing(12);
|
||||
|
||||
QHBoxLayout *simStatusLayout = new QHBoxLayout;
|
||||
QLabel *simTitle = new QLabel("SIM卡:");
|
||||
simTitle->setFixedWidth(80);
|
||||
simTitle->setStyleSheet("font-size: 14px; color: #333;");
|
||||
simStatusLayout->addWidget(simTitle);
|
||||
|
||||
m_simStatusLabel = new QLabel("已插入 (中国移动)");
|
||||
m_simStatusLabel->setStyleSheet("font-size: 14px; color: #4CAF50;");
|
||||
simStatusLayout->addWidget(m_simStatusLabel);
|
||||
simStatusLayout->addStretch();
|
||||
simLayout->addLayout(simStatusLayout);
|
||||
|
||||
// 信号强度
|
||||
QHBoxLayout *signal4GLayout = new QHBoxLayout;
|
||||
QLabel *signal4GTitle = new QLabel("信号强度:");
|
||||
signal4GTitle->setFixedWidth(80);
|
||||
signal4GTitle->setStyleSheet("font-size: 14px; color: #333;");
|
||||
signal4GLayout->addWidget(signal4GTitle);
|
||||
|
||||
m_4gSignalBar = new QProgressBar;
|
||||
m_4gSignalBar->setFixedHeight(10);
|
||||
m_4gSignalBar->setRange(0, 100);
|
||||
m_4gSignalBar->setValue(75);
|
||||
m_4gSignalBar->setTextVisible(false);
|
||||
m_4gSignalBar->setStyleSheet(R"(
|
||||
QProgressBar {
|
||||
background-color: #e0e0e0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #4CAF50;
|
||||
border-radius: 5px;
|
||||
}
|
||||
)");
|
||||
signal4GLayout->addWidget(m_4gSignalBar, 1);
|
||||
simLayout->addLayout(signal4GLayout);
|
||||
|
||||
layout->addWidget(simGroup);
|
||||
|
||||
// APN设置
|
||||
QGroupBox *apnGroup = new QGroupBox("APN设置");
|
||||
apnGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *apnLayout = new QVBoxLayout(apnGroup);
|
||||
apnLayout->setContentsMargins(16, 24, 16, 16);
|
||||
apnLayout->setSpacing(12);
|
||||
|
||||
// APN选择
|
||||
QHBoxLayout *apnSelectLayout = new QHBoxLayout;
|
||||
QLabel *apnSelectLabel = new QLabel("预设APN:");
|
||||
apnSelectLabel->setFixedWidth(80);
|
||||
apnSelectLabel->setStyleSheet("font-size: 14px; color: #333;");
|
||||
apnSelectLayout->addWidget(apnSelectLabel);
|
||||
|
||||
m_apnCombo = new QComboBox;
|
||||
m_apnCombo->setStyleSheet(INPUT_STYLE);
|
||||
m_apnCombo->addItems({"中国移动 (cmnet)", "中国联通 (3gnet)", "中国电信 (ctnet)", "自定义"});
|
||||
m_apnCombo->setCursor(Qt::PointingHandCursor);
|
||||
apnSelectLayout->addWidget(m_apnCombo, 1);
|
||||
apnLayout->addLayout(apnSelectLayout);
|
||||
|
||||
// 自定义APN
|
||||
QHBoxLayout *apnCustomLayout = new QHBoxLayout;
|
||||
QLabel *apnCustomLabel = new QLabel("APN:");
|
||||
apnCustomLabel->setFixedWidth(80);
|
||||
apnCustomLabel->setStyleSheet("font-size: 14px; color: #333;");
|
||||
apnCustomLayout->addWidget(apnCustomLabel);
|
||||
|
||||
m_apnEdit = new QLineEdit;
|
||||
m_apnEdit->setStyleSheet(INPUT_STYLE);
|
||||
m_apnEdit->setPlaceholderText("输入自定义APN");
|
||||
m_apnEdit->setText("cmnet");
|
||||
apnCustomLayout->addWidget(m_apnEdit, 1);
|
||||
apnLayout->addLayout(apnCustomLayout);
|
||||
|
||||
// 用户名
|
||||
QHBoxLayout *usernameLayout = new QHBoxLayout;
|
||||
QLabel *usernameLabel = new QLabel("用户名:");
|
||||
usernameLabel->setFixedWidth(80);
|
||||
usernameLabel->setStyleSheet("font-size: 14px; color: #333;");
|
||||
usernameLayout->addWidget(usernameLabel);
|
||||
|
||||
m_4gUsernameEdit = new QLineEdit;
|
||||
m_4gUsernameEdit->setStyleSheet(INPUT_STYLE);
|
||||
m_4gUsernameEdit->setPlaceholderText("可选");
|
||||
usernameLayout->addWidget(m_4gUsernameEdit, 1);
|
||||
apnLayout->addLayout(usernameLayout);
|
||||
|
||||
// 密码
|
||||
QHBoxLayout *password4GLayout = new QHBoxLayout;
|
||||
QLabel *password4GLabel = new QLabel("密码:");
|
||||
password4GLabel->setFixedWidth(80);
|
||||
password4GLabel->setStyleSheet("font-size: 14px; color: #333;");
|
||||
password4GLayout->addWidget(password4GLabel);
|
||||
|
||||
m_4gPasswordEdit = new QLineEdit;
|
||||
m_4gPasswordEdit->setStyleSheet(INPUT_STYLE);
|
||||
m_4gPasswordEdit->setEchoMode(QLineEdit::Password);
|
||||
m_4gPasswordEdit->setPlaceholderText("可选");
|
||||
password4GLayout->addWidget(m_4gPasswordEdit, 1);
|
||||
apnLayout->addLayout(password4GLayout);
|
||||
|
||||
layout->addWidget(apnGroup);
|
||||
|
||||
// 连接状态
|
||||
QGroupBox *statusGroup = new QGroupBox("连接状态");
|
||||
statusGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *statusLayout = new QVBoxLayout(statusGroup);
|
||||
statusLayout->setContentsMargins(16, 24, 16, 16);
|
||||
statusLayout->setSpacing(12);
|
||||
|
||||
QHBoxLayout *status4GLayout = new QHBoxLayout;
|
||||
QLabel *status4GTitle = new QLabel("状态:");
|
||||
status4GTitle->setFixedWidth(80);
|
||||
status4GTitle->setStyleSheet("font-size: 14px; color: #333;");
|
||||
status4GLayout->addWidget(status4GTitle);
|
||||
|
||||
m_4gStatusLabel = new QLabel("未连接");
|
||||
m_4gStatusLabel->setStyleSheet("font-size: 14px; color: #f44336;");
|
||||
status4GLayout->addWidget(m_4gStatusLabel);
|
||||
status4GLayout->addStretch();
|
||||
statusLayout->addLayout(status4GLayout);
|
||||
|
||||
// 操作按钮
|
||||
QHBoxLayout *button4GLayout = new QHBoxLayout;
|
||||
button4GLayout->addStretch();
|
||||
|
||||
m_4gDisconnectBtn = new QPushButton("断开连接");
|
||||
m_4gDisconnectBtn->setStyleSheet(DANGER_BUTTON_STYLE);
|
||||
m_4gDisconnectBtn->setFixedWidth(100);
|
||||
m_4gDisconnectBtn->setCursor(Qt::PointingHandCursor);
|
||||
m_4gDisconnectBtn->setEnabled(false);
|
||||
connect(m_4gDisconnectBtn, &QPushButton::clicked, this, &WirelessWidget::on4GDisconnect);
|
||||
button4GLayout->addWidget(m_4gDisconnectBtn);
|
||||
|
||||
m_4gConnectBtn = new QPushButton("连接");
|
||||
m_4gConnectBtn->setStyleSheet(PRIMARY_BUTTON_STYLE);
|
||||
m_4gConnectBtn->setFixedWidth(100);
|
||||
m_4gConnectBtn->setCursor(Qt::PointingHandCursor);
|
||||
connect(m_4gConnectBtn, &QPushButton::clicked, this, &WirelessWidget::on4GConnect);
|
||||
button4GLayout->addWidget(m_4gConnectBtn);
|
||||
|
||||
statusLayout->addLayout(button4GLayout);
|
||||
layout->addWidget(statusGroup);
|
||||
|
||||
layout->addStretch();
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
QWidget *WirelessWidget::createStatusPanel()
|
||||
{
|
||||
QWidget *panel = new QWidget;
|
||||
panel->setStyleSheet("background-color: #f5f5f5;");
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(panel);
|
||||
layout->setContentsMargins(20, 20, 20, 20);
|
||||
layout->setSpacing(16);
|
||||
|
||||
// 网络信息
|
||||
QGroupBox *infoGroup = new QGroupBox("网络信息");
|
||||
infoGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *infoLayout = new QVBoxLayout(infoGroup);
|
||||
infoLayout->setContentsMargins(16, 24, 16, 16);
|
||||
infoLayout->setSpacing(12);
|
||||
|
||||
auto createInfoRow = [](const QString &title, QLabel *&valueLabel, const QString &defaultValue) -> QHBoxLayout *
|
||||
{
|
||||
QHBoxLayout *row = new QHBoxLayout;
|
||||
QLabel *titleLabel = new QLabel(title);
|
||||
titleLabel->setFixedWidth(100);
|
||||
titleLabel->setStyleSheet("font-size: 14px; color: #666;");
|
||||
row->addWidget(titleLabel);
|
||||
|
||||
valueLabel = new QLabel(defaultValue);
|
||||
valueLabel->setStyleSheet("font-size: 14px; color: #333; font-weight: 500;");
|
||||
row->addWidget(valueLabel);
|
||||
row->addStretch();
|
||||
return row;
|
||||
};
|
||||
|
||||
infoLayout->addLayout(createInfoRow("连接类型:", m_connectionTypeLabel, "未连接"));
|
||||
infoLayout->addLayout(createInfoRow("IP地址:", m_ipAddressLabel, "--"));
|
||||
infoLayout->addLayout(createInfoRow("MAC地址:", m_macAddressLabel, "--"));
|
||||
infoLayout->addLayout(createInfoRow("信号强度:", m_signalStrengthLabel, "--"));
|
||||
|
||||
layout->addWidget(infoGroup);
|
||||
|
||||
// 流量统计
|
||||
QGroupBox *trafficGroup = new QGroupBox("流量统计");
|
||||
trafficGroup->setStyleSheet(GROUP_STYLE);
|
||||
QVBoxLayout *trafficLayout = new QVBoxLayout(trafficGroup);
|
||||
trafficLayout->setContentsMargins(16, 24, 16, 16);
|
||||
trafficLayout->setSpacing(12);
|
||||
|
||||
trafficLayout->addLayout(createInfoRow("上传速度:", m_uploadSpeedLabel, "0 KB/s"));
|
||||
trafficLayout->addLayout(createInfoRow("下载速度:", m_downloadSpeedLabel, "0 KB/s"));
|
||||
|
||||
layout->addWidget(trafficGroup);
|
||||
|
||||
// 刷新按钮
|
||||
QHBoxLayout *refreshLayout = new QHBoxLayout;
|
||||
refreshLayout->addStretch();
|
||||
QPushButton *refreshBtn = new QPushButton("刷新状态");
|
||||
refreshBtn->setStyleSheet(PRIMARY_BUTTON_STYLE);
|
||||
refreshBtn->setFixedWidth(120);
|
||||
refreshBtn->setCursor(Qt::PointingHandCursor);
|
||||
connect(refreshBtn, &QPushButton::clicked, this, &WirelessWidget::onRefreshStatus);
|
||||
refreshLayout->addWidget(refreshBtn);
|
||||
layout->addLayout(refreshLayout);
|
||||
|
||||
layout->addStretch();
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
void WirelessWidget::onTabChanged(int index)
|
||||
{
|
||||
m_currentTab = index;
|
||||
m_contentStack->setCurrentIndex(index);
|
||||
|
||||
// 更新Tab样式
|
||||
for (int i = 0; i < m_tabButtons.size(); ++i)
|
||||
{
|
||||
m_tabButtons[i]->setStyleSheet(i == index ? TAB_ACTIVE_STYLE : TAB_STYLE);
|
||||
}
|
||||
}
|
||||
|
||||
void WirelessWidget::updateWifiList()
|
||||
{
|
||||
m_wifiList->clear();
|
||||
|
||||
// 添加模拟WiFi数据
|
||||
QStringList wifiNetworks = {
|
||||
"🔒 Office_5G (信号: 优)",
|
||||
"🔒 Office_2.4G (信号: 良)",
|
||||
"🔒 Guest_Network (信号: 中)",
|
||||
"🔓 Public_WiFi (信号: 弱)",
|
||||
"🔒 HomeNetwork (信号: 弱)"};
|
||||
|
||||
for (const QString &network : wifiNetworks)
|
||||
{
|
||||
QListWidgetItem *item = new QListWidgetItem(network);
|
||||
m_wifiList->addItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
void WirelessWidget::onWifiScan()
|
||||
{
|
||||
m_wifiScanBtn->setEnabled(false);
|
||||
m_wifiScanBtn->setText("扫描中...");
|
||||
|
||||
// 模拟扫描延迟
|
||||
QTimer::singleShot(1500, this, [this]()
|
||||
{
|
||||
updateWifiList();
|
||||
m_wifiScanBtn->setEnabled(true);
|
||||
m_wifiScanBtn->setText("扫描网络");
|
||||
OverlayDialog::information(window(), "扫描完成", "发现 5 个可用网络"); });
|
||||
}
|
||||
|
||||
void WirelessWidget::onWifiItemClicked(QListWidgetItem *item)
|
||||
{
|
||||
Q_UNUSED(item)
|
||||
m_wifiPasswordEdit->setFocus();
|
||||
}
|
||||
|
||||
void WirelessWidget::onWifiConnect()
|
||||
{
|
||||
if (m_wifiList->currentItem() == nullptr)
|
||||
{
|
||||
OverlayDialog::warning(window(), "提示", "请先选择要连接的WiFi网络");
|
||||
return;
|
||||
}
|
||||
|
||||
QString network = m_wifiList->currentItem()->text();
|
||||
bool needPassword = network.contains("🔒");
|
||||
|
||||
if (needPassword && m_wifiPasswordEdit->text().isEmpty())
|
||||
{
|
||||
OverlayDialog::warning(window(), "提示", "请输入WiFi密码");
|
||||
return;
|
||||
}
|
||||
|
||||
m_wifiConnectBtn->setEnabled(false);
|
||||
m_wifiConnectBtn->setText("连接中...");
|
||||
|
||||
// 模拟连接
|
||||
QTimer::singleShot(2000, this, [this, network]()
|
||||
{
|
||||
m_wifiConnectBtn->setEnabled(true);
|
||||
m_wifiConnectBtn->setText("连接");
|
||||
|
||||
// 模拟连接成功
|
||||
m_wifiStatusLabel->setText("已连接");
|
||||
m_wifiStatusLabel->setStyleSheet("font-size: 14px; color: #4CAF50;");
|
||||
m_wifiSignalBar->setValue(85);
|
||||
m_wifiDisconnectBtn->setEnabled(true);
|
||||
|
||||
updateConnectionStatus();
|
||||
OverlayDialog::information(window(), "连接成功", "已成功连接到WiFi网络"); });
|
||||
}
|
||||
|
||||
void WirelessWidget::onWifiDisconnect()
|
||||
{
|
||||
m_wifiStatusLabel->setText("未连接");
|
||||
m_wifiStatusLabel->setStyleSheet("font-size: 14px; color: #f44336;");
|
||||
m_wifiSignalBar->setValue(0);
|
||||
m_wifiDisconnectBtn->setEnabled(false);
|
||||
m_wifiPasswordEdit->clear();
|
||||
|
||||
updateConnectionStatus();
|
||||
OverlayDialog::information(window(), "已断开", "WiFi连接已断开");
|
||||
}
|
||||
|
||||
void WirelessWidget::on4GConnect()
|
||||
{
|
||||
m_4gConnectBtn->setEnabled(false);
|
||||
m_4gConnectBtn->setText("连接中...");
|
||||
|
||||
QTimer::singleShot(2000, this, [this]()
|
||||
{
|
||||
m_4gConnectBtn->setEnabled(true);
|
||||
m_4gConnectBtn->setText("连接");
|
||||
|
||||
m_4gStatusLabel->setText("已连接 (4G LTE)");
|
||||
m_4gStatusLabel->setStyleSheet("font-size: 14px; color: #4CAF50;");
|
||||
m_4gDisconnectBtn->setEnabled(true);
|
||||
|
||||
updateConnectionStatus();
|
||||
OverlayDialog::information(window(), "连接成功", "4G网络连接成功"); });
|
||||
}
|
||||
|
||||
void WirelessWidget::on4GDisconnect()
|
||||
{
|
||||
m_4gStatusLabel->setText("未连接");
|
||||
m_4gStatusLabel->setStyleSheet("font-size: 14px; color: #f44336;");
|
||||
m_4gDisconnectBtn->setEnabled(false);
|
||||
|
||||
updateConnectionStatus();
|
||||
OverlayDialog::information(window(), "已断开", "4G网络连接已断开");
|
||||
}
|
||||
|
||||
void WirelessWidget::onRefreshStatus()
|
||||
{
|
||||
updateConnectionStatus();
|
||||
}
|
||||
|
||||
void WirelessWidget::updateConnectionStatus()
|
||||
{
|
||||
// 检查连接状态并更新状态面板
|
||||
bool wifiConnected = m_wifiStatusLabel->text().contains("已连接");
|
||||
bool g4Connected = m_4gStatusLabel->text().contains("已连接");
|
||||
|
||||
if (wifiConnected)
|
||||
{
|
||||
m_connectionTypeLabel->setText("WiFi");
|
||||
m_ipAddressLabel->setText("192.168.1.105");
|
||||
m_macAddressLabel->setText("AA:BB:CC:DD:EE:FF");
|
||||
m_signalStrengthLabel->setText(QString("%1%").arg(m_wifiSignalBar->value()));
|
||||
m_uploadSpeedLabel->setText("125 KB/s");
|
||||
m_downloadSpeedLabel->setText("2.3 MB/s");
|
||||
}
|
||||
else if (g4Connected)
|
||||
{
|
||||
m_connectionTypeLabel->setText("4G LTE");
|
||||
m_ipAddressLabel->setText("10.0.0.55");
|
||||
m_macAddressLabel->setText("--");
|
||||
m_signalStrengthLabel->setText(QString("%1%").arg(m_4gSignalBar->value()));
|
||||
m_uploadSpeedLabel->setText("85 KB/s");
|
||||
m_downloadSpeedLabel->setText("1.2 MB/s");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_connectionTypeLabel->setText("未连接");
|
||||
m_ipAddressLabel->setText("--");
|
||||
m_macAddressLabel->setText("--");
|
||||
m_signalStrengthLabel->setText("--");
|
||||
m_uploadSpeedLabel->setText("0 KB/s");
|
||||
m_downloadSpeedLabel->setText("0 KB/s");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user