Trước hết, tôi muốn đề cập đến rằng tôi thấy rằng bài đăng có liên quan How to get the mouse position on the screen in Qt? nhưng nó "không hoạt động" đối với tôi. Tôi đã thực hiện một số thử nghiệm và kết quả không hoạt động như tôi mong đợi, vì vậy tôi quyết định tạo một bài đăng mới để nói về bài kiểm tra tôi đã thực hiện và tìm giải pháp thay thế.Qt 5, nhận vị trí chuột trên màn hình
Đó là đoạn code tôi sử dụng để làm các xét nghiệm:
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());
gì tôi đã mong đợi, đó là chỉ có một màn hình sẽ trở lại một vị trí hợp lệ, kể từ khi con trỏ chỉ vào một màn hình, chứ không phải trên cả hai. Nhưng nó không phải là trường hợp, các vị trí cả hai (pos0
và pos1
) có giá trị chính xác cùng, như chúng ta có thể thấy trên đầu ra:
screen0 DVI-D-0
screen1 HDMI-0
pos 0: 1904, 1178
pos 1: 1904, 1178
pos: 1904, 1178
Kể từ khi vị trí cả hai có cùng một giá trị, tôi không thể biết tại màn hình nào là con trỏ. Tôi không biết nếu đó là một hành vi bình thường hoặc một lỗi, kể từ khi tài liệu hướng dẫn không nói những gì sẽ xảy ra khi đối số màn hình không phải là màn hình mà con chuột được.
Ý tưởng của tôi là mở/khởi chạy một ứng dụng (được thực thi bởi một daemon Qt phải phát hiện màn hình được chọn) đến màn hình có con chuột. Tôi biết rằng với libX11 có thể, bởi vì tôi đã làm điều đó trong quá khứ, nhưng tôi cần phải làm việc với Qt 5, và tôi không thể tìm ra cách để phát hiện màn hình được chọn với Qt.
Tôi cũng đã thực hiện các thử nghiệm khác, sử dụng các lớp học QApplication
và QDesktopWidget
không có may mắn.
Bạn đang sử dụng máy tính để bàn ảo? Một đầu kép? – peppe