• 10539阅读
  • 5回复

[提问]高DPI下QPainter的坐标和尺寸用的是物理像素还是逻辑点呢? [复制链接]

上一主题 下一主题
离线roywillow
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-03
Qt5本身似乎是支持自动进行逻辑像素和物理像素间的转换的,也就是说能自动适应高dpi的效果(https://blog.qt.digia.com/blog/2013/04/25/retina-display-support-for-mac-os-ios-and-x11/)。基本上96dpi下的设计放到高dpi下都会自动进行“放大”。
但是最近没事测试了一下把系统的dpi改到200%(Windows 8.1),看看Qt的程序究竟会怎样。理想状况下应该是界面上所有的组件都是矢量或标量下的2倍后效果,但是发现大部分Qt自己的QWidget都能适应(除了各种checkbox的选择按钮和滚动条,目前就发现这么多,Qt5.2.0,fusion风格下),自己用QPainter绘制的各种QWidget似乎都没有自动进行放大,还是保持着原来的大小,也就是说QPainter此时的单位还是物理像素?
虽然Qt也提供了dpi缩放率的接口,但是如果真要自己去适应的话会很麻烦,得自己重新计算再用QPainter绘制。各位在处理这方面的问题上有没有经验呢?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线pxiao_xiao

只看该作者 1楼 发表于: 2014-05-04
不知道 坐等答案
离线彩阳

只看该作者 2楼 发表于: 2014-05-04
请看QScreen类,里面有很多函数符合你的转换要求。
上海Qt开发联盟,热忱地欢迎你的加入!
离线roywillow

只看该作者 3楼 发表于: 2014-05-04
回 彩阳 的帖子
彩阳:请看QScreen类,里面有很多函数符合你的转换要求。 (2014-05-04 08:30) 

得自己去慢慢去处理了么……
话说怎么获得一个QWidget所在的QScreen呢?好像没找到?
目前是用QWidget的logicalDpiX()/Y()来处理的,简单的还好,复杂点的就很OTL
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线彩阳

只看该作者 4楼 发表于: 2014-05-04
请看这个静态函数:
QScreen * QGuiApplication::primaryScreen() [static]
上海Qt开发联盟,热忱地欢迎你的加入!
离线roywillow

只看该作者 5楼 发表于: 2014-05-04
回 彩阳 的帖子
彩阳:请看这个静态函数:
QScreen * QGuiApplication::primaryScreen() [static] (2014-05-04 21:55) 

那么如果一个程序运行在不同的屏幕上呢?虽然这种情况比较少见,但是如果一个程序的不同窗口在不同的屏幕上,并且dpi还不一样的话……(windows能给不同屏幕设定不同的dpi么……?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个