QT 如何支持高清屏,视网膜屏幕( 三 )


不管怎样,::width()实际上就是::width(),它返回的是设备无关像素的值 。如果需要,用它来乘以->()->()可以解决很多问题 。
Qt Quick 2和控件
Qt Quick 2和Qt Quick控件可以直接使用 。因为窗口部件的坐标是设备无关像素的 。Qt Quick也有几个和光栅相关的极端情况,因为QML的Image元素是通过URL来指定图像源的,这样就避免了像素映射的传递 。
Qt Quick控件
还有一个例外是着色器(),它运行在设备像素空间中并且可以看到全分辨率 。在通常情况下这没有什么问题,我们应该知道的一件重要的事情是,鼠标坐标是设备无关像素的,也许需要被转换成设备像素 。
运行中的着色器效果实例
管理高解析度的光栅内容
正如我们所看到的,在缩放的情况下,光栅内容看起来会不够好,所以必须提供高解析度的内容 。作为应用程序开发人员,您有两个选项:(请忽略“什么都不做”选项)
第一个选项很简单,因为每个资源只有一个版本 。可是您也许会发现(或者您的设计师会告诉您)像图标这样的资源只有在它被创建的那个特定解析度下看起来才最好 。为了解决这个问题,Qt沿用了“@2x”这种图像文件名的方案:
foo.pngfoo@2x.png
这样高解析度的内容和原来的一一对应 。在需要的时候,“@2x”的版本会被QML的Image元素以及QIcon自动加载 。
Image { source = “foo.png” }QIcon icon(“foo.png”)
(对于QIcon请记住使用)
试验性的跨平台的高解析度支持
QPA允许我们相对容易的完成跨平台的实现 。Qt现在把这一问题分为三层:
简化一下,应用程序层是在设备无关像素空间中工作的,并不知道设备像素 。平台插件是在设备像素空间中工作的,并不知道设备无关像素 。QPA层在两者之间,基于一个由环境变量TOR指定的缩放因子进行转换 。
实际上,这个情况还会更复杂一些,各层之间会有泄露的事情发生,并且在Mac和iOS下还会有一些例外情况 。
代码在上 。最后是XCB下的Qt 的截屏:
DPI缩放的Qt
OR=2缩放的Qt
Leave a
inqt-labs-| Tags: , Mac OS X, QPA, Qt