我正在尝试从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)
我在这里做错了吗?
答案 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 - 点和像素 按相同数量缩放。缩放“更多空间”应用程序时 将渲染到一个大的后备存储,然后缩小到 物理屏幕分辨率。