首先,我想提一提的是,我發現相關的帖子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