Qt给出了错误的屏幕几何图形?

时间:2014-09-18 14:28:52

标签: python qt pyside

我正在尝试从PySide获取屏幕分辨率:

class Prog(QtGui.QDialog):
    def __init__(self):
        super().__init__()
        self.timer = QtCore.QTimer()

        desktop = QtGui.QDesktopWidget()
        dim = desktop.availableGeometry(desktop.primaryScreen())
        print(dim)
        print(desktop.width())
        print(desktop.height())
        print(QtGui.QApplication.desktop().screenGeometry())

app = QtGui.QApplication(sys.argv)
prog = Prog()
prog.show()
sys.exit(app.exec_())

我在macbook pro上,所以我知道分辨率是2560乘1600,但Qt似乎始终给出了错误的答案:

PySide.QtCore.QRect(0, 22, 1440, 874)
1440
900
PySide.QtCore.QRect(0, 0, 1440, 900)

我在这里做错了吗?

1 个答案:

答案 0 :(得分:5)

Qt没有任何问题,您可以阅读此文档:retina display support,主要是此部分Mac OS X High-dpi Support,您可以在其中找到:

  

OS X高dpi模式的关键在于大多数几何体   之前在设备像素中指定的内容现在与设备无关   点。这包括桌面几何(在15英寸视网膜上)   MacBook Pro是1440×900而不是完整的2880×1800),窗口几何形状   和事件坐标。 CoreGraphics绘制引擎意识到了这一点   全分辨率并将以该分辨率产生输出。对于   例如,100×100窗口在正常情况下占据屏幕上的相同区域   和高dpi屏幕(其他一切都相同)。在高dpi   屏幕窗口的后备存储包含200×200像素。

  

此模式的主要优点是向后兼容性和免费   高dpi矢量图形。不知情的应用程序只是继续工作   具有与之前相同的几何形状,并且可以保持硬编码的像素值。   同时,他们可以免费获得清晰的矢量图形,如文本。   光栅图形不会得到自动改进,但是   管理。缺点是不可避免的坐标系混乱   使用混合点和像素的代码时。

     

点和像素之间的比例因子总是2倍。这也是   更改屏幕分辨率时为true - 点和像素   按相同数量缩放。缩放“更多空间”应用程序时   将渲染到一个大的后备存储,然后缩小到   物理屏幕分辨率。