From aeced57129ac695894f06c0a10a0a69bb08dfedf Mon Sep 17 00:00:00 2001 From: Dong Hualin Date: Wed, 21 Jul 2021 18:25:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=B1=8F=E5=B9=95=E5=8C=BA=E5=9F=9F=E5=BD=93=E5=89=8D=E5=88=86?= =?UTF-8?q?=E8=BE=A8=E7=8E=87=E7=9A=84=E6=98=BE=E7=A4=BA=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 显示器同时连接4k屏幕和1080屏幕,若在4k屏幕下设置缩放因子为2.75,得到的原始分辨率始终比实际原始分辨率大,导致桌面无法正确识别当前的显示器 Log: 修复屏幕缩放因子为小数的情况下屏幕分辨率的误差的问题 Bug: https://pms.uniontech.com/zentao/bug-view-87627.html Change-Id: Ice1369af0d756837aa527131503d8a380b5d8cf0 --- frame/util/multiscreenworker.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index b88862608..00181b2e6 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1378,7 +1378,9 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po for (auto s : DIS_INS->screens()) { if (s->name() == screenName) { QRect screenRect = s->geometry(); - screenRect.setSize(screenRect.size() * s->devicePixelRatio()); + // 不能直接用screenRect乘缩放率,因为那样会四舍五入得到的数值有误差,桌面在判断当前显示器的时候得到的显示器错误,引起桌面图标的显示错误 + screenRect.setWidth(s->geometry().x() + int(s->geometry().width() * s->devicePixelRatio())); + screenRect.setHeight(s->geometry().y() + int(s->geometry().height() * s->devicePixelRatio())); switch (pos) { case Position::Top: @@ -1429,7 +1431,9 @@ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Po for (auto s : DIS_INS->screens()) { if (s->name() == screenName) { QRect screenRect = s->geometry(); - screenRect.setSize(screenRect.size() * s->devicePixelRatio()); + // 不能直接用screenRect乘缩放率,因为那样会四舍五入得到的数值有误差,桌面在判断当前显示器的时候得到的显示器错误,引起桌面图标的显示错误 + screenRect.setWidth(s->geometry().x() + int(s->geometry().width() * s->devicePixelRatio())); + screenRect.setHeight(s->geometry().y() + int(s->geometry().height() * s->devicePixelRatio())); switch (pos) { case Position::Top: