【发布时间】:2015-08-16 21:39:28
【问题描述】:
首先,我想提一下,我发现了相关帖子How to get the mouse position on the screen in Qt?,但它对我来说“只是没有用”。我做了一些测试,结果并没有达到我的预期,所以我决定发一个新帖子来谈谈我所做的测试并寻找替代解决方案。
这是我用来做测试的代码:
QScreen *screen0 = QApplication::screens().at(0);
QScreen *screen1 = QApplication::screens().at(1);
printf("screen0 %s \n", screen0->name().toStdString().c_str());
printf("screen1 %s \n", screen1->name().toStdString().c_str());
// Position on first screen.
QPoint pos0 = QCursor::pos(screen0);
// Position on second screen.
QPoint pos1 = QCursor::pos(screen1);
printf("pos 0: %d, %d \n", pos0.x(), pos0.y());
printf("pos 1: %d, %d \n", pos1.x(), pos1.y());
// Get position without screen.
QPoint pos = QCursor::pos();
printf("pos: %d, %d \n", pos.x(), pos.y());
我所期待的是,只有一个屏幕会返回有效位置,因为光标只在一个屏幕上,而不是在两个屏幕上。但事实并非如此,这两个位置(pos0 和 pos1)具有完全相同的值,正如我们在输出中看到的那样:
screen0 DVI-D-0
screen1 HDMI-0
pos 0: 1904, 1178
pos 1: 1904, 1178
pos: 1904, 1178
由于两个位置的值相同,我无法知道光标在哪个屏幕上。我不知道这是正常行为还是错误,因为文档没有说明当屏幕参数不是鼠标所在的屏幕时会发生什么。
我的想法是打开/启动一个应用程序(由必须检测所选屏幕的 Qt 守护程序执行)到鼠标所在的屏幕。我知道使用 libX11 是可能的,因为我过去做过,但我需要使用 Qt 5,我不知道如何使用 Qt 检测选定的屏幕。
我还进行了其他测试,使用 QApplication 和 QDesktopWidget 类但没有运气。
【问题讨论】:
-
您使用的是虚拟桌面吗?双头?
标签: c++ qt qt5 multiscreen