修复:

- 设置页「使用代理更新」改为左文字 + 右侧苹果风格开关(ToggleSwitch 自绘:绿/灰胶囊+滑动圆钮,无图片资源)
This commit is contained in:
RoyirinRosmontis
2026-08-24 12:10:28 +08:00
parent a08ca154c9
commit 3519fbe9e3
+35 -7
View File
@@ -8,8 +8,8 @@ from PyQt5.QtWidgets import (
QVBoxLayout, QHBoxLayout, QFrame, QMessageBox, QTextEdit, QVBoxLayout, QHBoxLayout, QFrame, QMessageBox, QTextEdit,
QCheckBox, QMenu, QDialog, QLineEdit, QCheckBox, QMenu, QDialog, QLineEdit,
) )
from PyQt5.QtCore import Qt, QTimer, pyqtSignal from PyQt5.QtCore import Qt, QTimer, QRectF, pyqtSignal
from PyQt5.QtGui import QFont, QIcon, QPixmap, QImage, QColor from PyQt5.QtGui import QFont, QIcon, QPixmap, QImage, QColor, QPainter
# GUI 窗口在 96 DPI / 100% 缩放下的逻辑尺寸;启用 Qt 高分屏缩放后, # GUI 窗口在 96 DPI / 100% 缩放下的逻辑尺寸;启用 Qt 高分屏缩放后,
# Qt 会自动按 devicePixelRatio 放大/缩小,因此代码里保持逻辑尺寸不变即可。 # Qt 会自动按 devicePixelRatio 放大/缩小,因此代码里保持逻辑尺寸不变即可。
@@ -1438,12 +1438,16 @@ class SettingsDialog(QDialog):
port_row.addWidget(self.ed_port) port_row.addWidget(self.ed_port)
layout.addLayout(port_row) layout.addLayout(port_row)
# 更新方式:是否走节点隧道(默认关 = 直连仓库) # 更新方式:左文字 + 右苹果式开关(默认关 = 直连仓库)
self.cb_update_proxy = QCheckBox("使用代理更新") upd_row = QHBoxLayout()
self.cb_update_proxy.setChecked(_update_via_proxy()) upd_lab = QLabel("使用代理更新")
upd_lab.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;")
upd_row.addWidget(upd_lab)
upd_row.addStretch()
self.cb_update_proxy = ToggleSwitch(checked=_update_via_proxy())
self.cb_update_proxy.setToolTip("开启后检查更新与下载走节点隧道(CONNECT);默认直连仓库") self.cb_update_proxy.setToolTip("开启后检查更新与下载走节点隧道(CONNECT);默认直连仓库")
self.cb_update_proxy.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;") upd_row.addWidget(self.cb_update_proxy)
layout.addWidget(self.cb_update_proxy) layout.addLayout(upd_row)
layout.addStretch() layout.addStretch()
@@ -1510,6 +1514,30 @@ class SettingsDialog(QDialog):
log("已退出登录:凭据与节点配置已清除,下次启动或开启代理时需重新登录") log("已退出登录:凭据与节点配置已清除,下次启动或开启代理时需重新登录")
self.accept() self.accept()
# ── 苹果风格开关 ─────────────────────────────────────
class ToggleSwitch(QCheckBox):
"""苹果风格开关:左关右开,绿/灰胶囊 + 滑动圆钮(自绘,无图片资源)。"""
def __init__(self, checked=False, parent=None):
super().__init__(parent)
self.setChecked(checked)
self.setFixedSize(42, 22)
self.setCursor(Qt.PointingHandCursor)
def paintEvent(self, e):
p = QPainter(self)
p.setRenderHint(QPainter.Antialiasing)
p.setPen(Qt.NoPen)
# 胶囊背景:开=主题绿,关=浅灰
p.setBrush(QColor(C_GREEN) if self.isChecked() else QColor("#c8ccd4"))
p.drawRoundedRect(QRectF(0, 0, 42, 22), 11, 11)
# 白色圆钮:开在右,关在左
knob_x = 20.0 if self.isChecked() else 2.0
p.setBrush(QColor("#ffffff"))
p.drawEllipse(QRectF(knob_x, 2.0, 18.0, 18.0))
p.end()
# ── 状态指示灯(小圆点) ─────────────────────────────── # ── 状态指示灯(小圆点) ───────────────────────────────
class StatusDot(QLabel): class StatusDot(QLabel):