我不明白 mapToGlobal 如何与多屏幕设置交互。它是返回相对于该特定屏幕还是整个桌面的全局位置?
如果我调用 QCursor.setPos(widget.mapToGlobal(widget.geometry().topLeft()) 将始终以小部件左上角的指针结束,无论多屏情况如何?
我不明白 mapToGlobal 如何与多屏幕设置交互。它是返回相对于该特定屏幕还是整个桌面的全局位置?
如果我调用 QCursor.setPos(widget.mapToGlobal(widget.geometry().topLeft()) 将始终以小部件左上角的指针结束,无论多屏情况如何?
正如 mapToGlobal 的文档所述:-
将小部件坐标 pos 转换为全局屏幕坐标
由于您是从本地坐标映射,您实际上可以使用:-
mapToGlobal(QPoint(0,0));
而不必指定小部件的几何图形的左上角位置。
至于从内存映射到全局坐标,我认为全局空间跨屏幕扩展,因此如果并排排列,两个分辨率为 1024 x 768 的屏幕将提供 2048 x 768 的屏幕空间。
文档还指出: -
对于多屏桌面,桌面大小是所有屏幕大小的并集
所以我希望 mapToGlobal 会返回一个关于可用总屏幕空间的值,而不仅仅是小部件所在的屏幕。如果没有,处理放置在两个屏幕之间的小部件将非常尴尬。
请注意,您还可以使用 QDesktopWidget 获取有关不同屏幕的信息并检查小部件驻留在哪个屏幕上。如果您想在特定屏幕上放置小部件,它也很有用。
最后,在 Qt 5 中,还有用于查询屏幕属性的 QScreen 类。