Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

截图时的放大窗在200% DPI下每次移动2个像素。 #372

Closed
wdhwg001 opened this issue Mar 10, 2017 · 5 comments
Closed

截图时的放大窗在200% DPI下每次移动2个像素。 #372

wdhwg001 opened this issue Mar 10, 2017 · 5 comments

Comments

@wdhwg001
Copy link

wdhwg001 commented Mar 10, 2017

image

这个放大窗口有时在鼠标每移动2像素时才会移动2像素,而不是鼠标每移动1像素就移动1像素。

顺便,这个放大窗口中央部分是显示22像素而不是11像素的,两旁的浅蓝色线条也是2像素宽,这是Bug还是Feature?通常来说选择的颜色点位于中央会比较自然一些,如果基于“想要展示上下文”的目的的话,中央窗口尺寸3*3,选色点位于第二行第二列,周围蓝条宽1像素会不会更合适?

在Windows 10 x64,DPI 200%下可以复现。

@liulex
Copy link
Member

liulex commented Mar 10, 2017

你打开日志开关,观察启动时的日志,应该有这两行:

Screen scale: 1
Retina factor: 2

在 Windows 下,200% DPI 有两种方式:

  1. dots per inch = 1, device pixel ratio = 2
  2. dots per inch = 2, device pixel ratio = 1

同样是 2880 个像素宽的屏幕:

对于第一种方式(也即你的情况),程序被告知屏幕宽度只有 1440,光标从 (0, 0) 到 (1, 0),坐标变动了 1,但实际上移动了两个像素,也就是每个屏幕坐标实际对应了 4 个像素,所以只能像你截图中那样显示,并不是为了展示上下文。

在 1.12 之前,是四个像素的色值同时显示的,但是复制色值只能复制左上角那个。1.12 做了改进,只显示一个色值,但是用户可以通过 Ctrl (macOS 是 Cmd) 来循环选择显示哪个色值。

对于第二种方式,程序被告知屏幕宽度就是 2880,这时就好处理了,因为每个屏幕坐标就对应一个像素。

显然,第二种方式更佳。

我在 MacBook Pro (Retina) 上装的 Windows 10,DPI 设为 200%,也没做其他设置,获得的就是第二种情况,所以无须显示 4 个像素:
default

Qt 有选项(Qt::AA_EnableHighDpiScaling)可以让第二种情况转为第一种情况,但反过来,我就不清楚了。我也不太清楚你是通过怎样的设置获得的第一种情况,但 Windows 应该有相关系统设置是控制这个的,你可以尝试搜索一下。

至于 macOS,其系统 API 就只提供了第一种方式…………

@wdhwg001
Copy link
Author

wdhwg001 commented Mar 10, 2017

http://stackoverflow.com/questions/35816944/improper-scaling-of-qt-desktop-application-in-windows-10

尝试打开cmd,输入set QT_AUTO_SCREEN_SCALE_FACTOR=0后启动Snipaste可以进入第二种方式。

或许,按照这里尝试一下qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "0");,并将其开关放在设置中会是一个不错的主意。

@liulex
Copy link
Member

liulex commented Mar 10, 2017

默认应该是没有这个环境变量的吧……
你试试把 QT_AUTO_SCREEN_SCALE_FACTOR 这个环境变量删掉,看进入的是哪种方式。

@wdhwg001
Copy link
Author

第一种,我默认没有这个环境变量。
但是我有个环境变量是QT_DEVICE_PIXEL_RATIO=auto,删除之后进入第二种了。
不知道是什么软件给我添加的,不过考虑到有些用户可能也和我有同样的问题,因此上文所说的增添一个设置,使得启用后调用qputenv或许依旧是个主意。

@liulex
Copy link
Member

liulex commented Mar 10, 2017

没想到是 Qt 相关的环境变量的锅,我以为和系统本身的设置有关 😅
OK,我已显示禁用 DPI scaling~ 谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants