Прежде всего, я хотел бы упомянуть, что нашел, что связанный пост 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