首先,我想提一提的是,我发现相关的帖子How to get the mouse position on the screen in Qt?,但它对我来说“只是没有用”。我做了一些测试,结果没有像我预期的那样工作,所以我决定做一个新的帖子来谈论我做的测试并寻找替代解决方案。Qt 5,获得鼠标在屏幕上的位置
是这样的代码,我用来做测试:
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
类没有运气。
您使用的是虚拟桌面吗?双头? – peppe