From 649d8a5298e1a4569b12f3a07209716a6ee40b01 Mon Sep 17 00:00:00 2001 From: MarcusPy827 Date: Fri, 1 May 2026 07:01:20 -0500 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E6=A0=8F=E5=9C=A8=E6=B7=B1=E8=89=B2=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E4=BB=8D=E4=B8=BA=E7=99=BD=E8=89=B2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debian/changelog | 8 ++++++++ gxde-hardware-viewer.py | 6 ++---- translations/gxde-hardware-viewer_en_US.qm | 1 + translations/gxde-hardware-viewer_zh_CN.qm | Bin 14031 -> 16371 bytes 4 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 translations/gxde-hardware-viewer_en_US.qm diff --git a/debian/changelog b/debian/changelog index 30d86ee..ae3180b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +gxde-hardware-viewer (2.6.2-2) UNRELEASED; urgency=medium + + [ CharOfString ] + * 修复标题栏在深色模式下仍为白色的问题 + * 重新生成了翻译的qm文件 + + -- CharOfString Fri, 1 May 2026 07:00:11 -0500 + gxde-hardware-viewer (2.6.2-1) UNRELEASED; urgency=medium [ CharOfString ] diff --git a/gxde-hardware-viewer.py b/gxde-hardware-viewer.py index 19930ca..4e59f31 100644 --- a/gxde-hardware-viewer.py +++ b/gxde-hardware-viewer.py @@ -107,7 +107,7 @@ class TitleBarBtns(QWidget): return int(value * self.scaling_factor) def _is_dark(self) -> bool: - return QApplication.styleHints().colorScheme() == Qt.ColorScheme.Dark + return self.palette().color(QPalette.ColorRole.Window).lightness() < 128 def _icon_path(self, state: str) -> str: prefix = self._ICON_PREFIX[self.btnType] @@ -328,9 +328,7 @@ class GXDETitleBar(QWidget): # 6. 重载绘制函数 # 模仿DTK2.0时代的标题栏 def is_dark_mode(self) -> bool: - # 需要Qt 6.5+ - scheme = QApplication.styleHints().colorScheme() - return scheme == Qt.ColorScheme.Dark + return self.palette().color(QPalette.ColorRole.Window).lightness() < 128 def paintEvent(self, event): painter = QPainter(self) diff --git a/translations/gxde-hardware-viewer_en_US.qm b/translations/gxde-hardware-viewer_en_US.qm new file mode 100644 index 0000000..be651ee --- /dev/null +++ b/translations/gxde-hardware-viewer_en_US.qm @@ -0,0 +1 @@ +L%X;Brv7#UnaRrZ`fV!eWl?9a*QDH$u6hwqoezf~0Z3F6R=9f&qZ{GKR*Z;jY zU7jChq#^Z~2f(lmir2jb zAbki*8czYJSHbkLYXQd2hSK6)_`DKIAF<$lDcsTg0OEvT*4)4m2!iGX*wo#D3eLdhN&6944LcX!0-*m799ee|*RR6KJ*5BxCc&ASLkPH+ zlEDSQ4`s+30x-l&#U@Ju$X2RUo`MFQrmBYR1{gYo;t#F>P^43YOaC8N*04iFQRROMqtGry7uGf^&aoTPcjUVxhp zNFI6$Bb+r^^1A$cG}tRSbS#LL4X>75ZX1mjZIULBUjQKcM4Gaz9Ux_$bWR98lIx{+ z?ZW+(fzlO6-$TQk(v^SzH^9gl(#L=9M#C>jJ1rQQ8 zc)9G0ulE7ynq=JrCSd5_lMm|JjSh6kV^_wayg?oux&}jQd{O?FsgIyywS4M+RFw3V z{Pr&~v>Ls<>T)}JkRq?nz~?zOx%C_LEM<;705i~_3VD70R)9f;^7iI80Md`iw=|=| zjGyJ(w_qwpCd%LGL~iBs@(*rDQsyKSFyB{cBnTa>AuIf$F6EbTz~#NZyKCnpg}^R05x zTui~>IOPjo40&9a^2-E*WZ9`aS6zfDI-~sMDDDrfP)TyJ>=cYD=eadl6-rg{sP{1E z|5P#B41i&$RLr7e%>8tg<33yuZBYgOi|33dRrPy^Bkpk3TCxerd$;P5x_beFRHEwD zmMge%PIYz&dYH9Pb@jwVfbp|c*KV!B>M*J4lW2KvmO5$Q6R4n5eQV3x$bpB|lRnvk z908UhO4q`BWV_?PcN6Ff^q802gHP|Rw&?(4Mr!C0OE3kyG&GOo)t%Lp+>GZYBx=|n24Jo=8o~Sqo_k6Y_!13? zovYdR`3kK6jFp!;#gqb%vh`F(p#nO{+2V3CDFgrDjawG+pj1 zI)H%_bycwf>ibsL9vAFD;6mNoIhf0!V<81gJVwF5oQ`a!RJm_-AN^jQZmwgWr$ISURVDJSalQdXcNoAiZi_F=Vrq`&lv4uvA9`MSzdTYXitVQT%`?4LIVx+lU2?)9jEM<*zHmA zfm58UwT{?19#tTGh#8cStQEz~qrfCyQBh4q)a7-UOeWEWkk>Fe^oe16x_17>*5lR= z`^3ilN@r9&W(w!^vQ|H9BSkL3=Vls1OJj^NvMOEq*rVOZ9qcF36sNH6E;u@s><%WEHl2U<)T=z#XRG4x~xKI*ofib+Y*OK zf;E-hd@*~!`7-7-9WpT}KJbDASK|K#xVrH_8(mqzgU@=U9N+>wWIzEFh>W-aEhDPB zpv1#CSTfb+W(AU-Y4Uj;B-6AY)fc(>Sn+1@`0&@^vS$<&h?MCU4&{zD8f4ZF8}p-Z znotsYU`yH|3$IFDM9KBRvZiC9r;-M#;?1nTf#d5!yOXlQ@)7f>>U2k@rKvoJcli|y z_h1fG;06IK_*)00;{1|pW}V2j9(5FbjF}@oXQSY%{F%yO2gK0l%N~iiP4}{e+1YLT_CWRfOTJ5Ml4UVa->{rnRXp z->h0HD!Z=QGFYtAsOr2v)dK5AHb->#;bG16RVZrg#U^$aFZe|U&NMb(5z%Wqe~W(u z!L$AlyO9f!2F8o}`k}>2PEwc)s%O;9jvA+*$-6uZ-$*K~Jj;4RxtYfBT^Z}CQ1-~F zY1+oC>ugItuyc3rX?i7kWMDb#;p$m3nX%S6cuZNSY^X657}*jUpEYLCuh10{)X;Wq zLY%liOV@ZI3Zv=MNReS9wW6cHQ#7QaH)2smHd5jVZ5%Z;UEBOd(EB_2*a}SA?}Wp3 zS!GnH!xR&qVj4t++Oy9l(PGQ1Em+-kLnJk`I6o3G+VVcgDWcLvqkmQ0WVScb8T%L_ zM1n?KAu=K*tjueY+$8%|b5ukdiZP|mIwxIx_}iu!5$S7+9~q6|`^J<=LfbX6;A0~; zb{l{++hw;dcfiyT7e`G0+FdK*XH`66ppiY+K z8?#6QOMEOHgB4ruwE;&($DfZ2XWueGhXb9qM)1gU}F@gBU{gUiOVh` z*tjg>^51aY!V-qqCc6YiK#&X*UE(L`63<#WkB9Zza3Ep+ElB^!RK;E*G@_&@GInu* zFug@=qQx=}4gfk$jy(|Pjb%XjlRZ>_{NfD{jw#2U zy?f3)%U~#jvf$Im90Ihs(_;iD`0?`LoXCf4yexPLSRMlIG58Wx2cz)r!%N)r1BZJo z${|888e)utT*!m5_?>{iqj4Q&CcJv$@fH&7^V5zmHLNX4Hf!XqMVtd%!0!wAO{Byg zY0Z5!Ay&rQJAE+k0_U!0ZCSqF5#keR5s_ti9$Pr)MK*{?_zo2C5Zoy%BVuFpnP@u~ z#J%&cwLATOpOBxOZLtU@!N>4*qZpshB=|X=&8GY1QEpsr-q^eeV@Hpp|2!e4NJ2UD zWp7(=N^A#aRL{Ry@vWpHh$`zeR|!EjYl{qmq=%DS0148pppkw9D@3lY-=&hBpz zYfRt*yp=U!5o2V0EYJ8|I1n2cK@5l$`>{=QP%Kaz7a7k^21kJqu-jc$7mMQt&v;yd qfTskL=z`bSn}CW4a6j8_U^9K)lPEdkBWJMM(Vkx!CWw%KhWJ0C-&F(v delta 2410 zcmbVNX;4&G8vS1Pd#~T?6|fQLW@$hW6xoy#aiV5GTtGz-754@jL7ITwG@~-4XM!jO z_orh_%0xvIqoT&AiAZANGF8E-ol$4T9jb_6%;J_XqmE_{YEk-UeoR+&-MaUF%Q@#e zxBG$HQ?@q9&3#KWHkU|9BKFc@BI7FJS`QJ$t|E2jBO>u*3J+Ej@mA`0t&B+DPHBw` zh@$7vn7^DNQm&?Pi*F(>fHKE4sCS>H%=nxrB!gzy(}*ISH0!-3 zsNYSSMtw|f(s)th)15@Bk@VrHRumNJ@S-FXm_)~h)e`B(QOEI2B7=i&%{fox8_KYB zm+)Z>iGDK&zTh;nuy}+n1-MoM4@VCjR!>HzGOC8 zR}uMpGkfX_-6$}DIer-hRDWXbjsnt{GtAwcXc%6^{A#$5HanQd@fV4-0~E?z<54(H zG5FROL_RkZc_~n?f4#z)g}A^bMZ>`pM17r#)!P}kF90%K#bDMDy7N@Mcd>VkhRMv05LKIc1T%WZB(uv9~ z51#^{LAfg*N`y8k@2&0Pv4&vHKb%A7o(5-8cx?!ESmVfnqwl*Rv6YRYnB%1PssuK}#af7hY(g>3-6gHQ>g*8Yx+=`I~2MaAL|AqaJ!fih=jlLv2894`L z-yo_xKp=LE7;^G`B6sjQapcOsV%87DQUBacG>{j^o_vaDw^S@ly8whbu~K~+_Y=f7 z*Y%vA7q@~SDQd-U7J#9UFM96aT<=0PuaR^Ig}0_ivt}OE{t<^17nSGdeNb6}od517N0yI!{3gB=gl>q^%gq ze%(`k4gje1%)#+sFj=o!kA^XG^)Y85iT56T{DO1v&_;b?cpaYeQ2py0PQui8^chc( zH}HUd-rq(;neX%kAM_Ahs4p6n-wy{aebwGnB>bTNVd$y3(UJOJ+GpdQH>jsTvG7KNc0(;01?tDi^o?};oL zkzo$shRdQHVY?hNe>*jh1rFzmMS zuqhNv2~-53BOr9tGs!I!_d@jO-Yy{%Y-Qz+#m{DBgYqe{2}Ly#mZ<6)OC07Pd8e4= zgoq`K+#NZKk^G`{a$D3rMqU>44ihM3549a|E`Mp>x@=pK!{#iuWJ?J#K~ivRy0kNP zrAf%<*X(*FP?K$QmfKyGk|#7+N{kyU=f-C-GlxvvQIMa_=cN2!RDyE;V6FIHL?lz9 zxBOW`A7+4d(ebKF^M=oCUgvoUy>Uu;rPXeMwMs3i)(UGuN#){a7C)VMJI*+7_@tay la6#H$8NHsT_Bg#qMfmrVM3emU;8aGgOL8e>Tk?3te*vvElOg~B -- Gitee From 134b77978fbfa20f59143c8a0add849fbb85fd3b Mon Sep 17 00:00:00 2001 From: MarcusPy827 Date: Fri, 1 May 2026 07:23:52 -0500 Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E8=A7=A6=E6=91=B8?= =?UTF-8?q?=E5=B1=8F=E4=B8=8A=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8=E6=89=8B?= =?UTF-8?q?=E6=8C=87=E6=8B=96=E6=8B=BD=E6=A0=87=E9=A2=98=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debian/changelog | 1 + gxde-hardware-viewer.py | 58 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index ae3180b..5d04666 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ gxde-hardware-viewer (2.6.2-2) UNRELEASED; urgency=medium [ CharOfString ] * 修复标题栏在深色模式下仍为白色的问题 * 重新生成了翻译的qm文件 + * 新增了对触控屏的标题栏拖拽支持 -- CharOfString Fri, 1 May 2026 07:00:11 -0500 diff --git a/gxde-hardware-viewer.py b/gxde-hardware-viewer.py index 4e59f31..150f36c 100644 --- a/gxde-hardware-viewer.py +++ b/gxde-hardware-viewer.py @@ -279,6 +279,10 @@ class GXDETitleBar(QWidget): self.max_btn.clicked.connect(self.toggle_maximize) self.close_btn.clicked.connect(self.parent.close) + # 6. 允许在触屏上使用手指拖拽标题栏 + self.setAttribute(Qt.WidgetAttribute.WA_AcceptTouchEvents) + self._touch_drag_offset = None + def scaled(self, value): """复用缩放逻辑""" return int(value * self.scaling_factor) @@ -313,18 +317,60 @@ class GXDETitleBar(QWidget): self.parent.showMaximized() self.max_btn.setText("▢") + # 新的窗口移动实现 + # 目的是为了支持触摸屏上通过手指移动窗口 + def handleWindowMove(self): + window = self.parent.windowHandle() + if window is None: + return False + + # 如果窗口处于最大化状态,先还原再移动 + if self.parent.isMaximized(): + self.parent.showNormal() + window.startSystemMove() + return True + def mousePressEvent(self, event): if event.button() == Qt.MouseButton.LeftButton: - window = self.parent.windowHandle() - if window is not None: - # 如果窗口处于最大化状态,先还原再移动 - if self.parent.isMaximized(): - self.parent.showNormal() - window.startSystemMove() + if self.handleWindowMove(): event.accept() return super().mousePressEvent(event) + def event(self, e): + # 注意到触屏下似乎无法正确驱动 startSystemMove + # 现在手动trace触摸点位置,通过move()更新坐标得了 + et = e.type() + if et == QEvent.Type.TouchBegin: + pts = e.points() + if pts: + local_pos = pts[0].position().toPoint() + # 标题栏按钮不应该响应拖拽,不然点不动 + if self.childAt(local_pos) is not None: + return super().event(e) + if self.parent.isMaximized(): + self.parent.showNormal() + + global_pos = pts[0].globalPosition().toPoint() + self._touch_drag_offset = global_pos - self.parent.frameGeometry().topLeft() + e.accept() + return True + + elif et == QEvent.Type.TouchUpdate: + if self._touch_drag_offset is not None: + pts = e.points() + if pts: + global_pos = pts[0].globalPosition().toPoint() + self.parent.move(global_pos - self._touch_drag_offset) + e.accept() + return True + elif et in (QEvent.Type.TouchEnd, QEvent.Type.TouchCancel): + if self._touch_drag_offset is not None: + self._touch_drag_offset = None + e.accept() + return True + return super().event(e) + # 6. 重载绘制函数 # 模仿DTK2.0时代的标题栏 def is_dark_mode(self) -> bool: -- Gitee