Trong chương trình của tôi, tôi muốn có sự kiện mouseMoveEvent (sự kiện QMouseEvent *) được gọi bất cứ khi nào con chuột di chuyển (ngay cả khi nó di chuyển qua một cửa sổ khác).Lấy MouseMoveEvents trong Qt
Ngay bây giờ, trong tập tin mainwindow.cpp tôi, tôi có:
void MainWindow::mouseMoveEvent(QMouseEvent* event) {
qDebug() << QString::number(event->pos().x());
qDebug() << QString::number(event->pos().y());
}
Nhưng điều này dường như chỉ được gọi khi tôi nhấp và kéo chuột trong khi qua cửa sổ của chương trình riêng của mình. Tôi đã thử gọi
setMouseTracking(true);
trong constructor MainWindow, nhưng điều này dường như không làm bất cứ điều gì khác nhau (mouseMoveEvent vẫn chỉ được gọi khi tôi giữ nút chuột xuống, bất kể nó ở đâu). Cách dễ nhất để theo dõi vị trí chuột trên toàn cầu là gì?
Cảm ơn, nó hoạt động để nhận các bản cập nhật liên tục khi chuột qua cửa sổ ứng dụng, nhưng nếu con chuột di chuyển đến nơi khác, vị trí không cập nhật. – Switch
Để theo dõi con chuột bên ngoài cửa sổ, bạn cần phải lấy con chuột (xem QWidget :: grabMouse()). Vì tất cả các sự kiện chuột sẽ được gửi đến widget đã nắm lấy con chuột, điều này sẽ ngăn cản sự tương tác bình thường với các widget khác, trừ khi bạn chỉ lấy con chuột khi chuột rời khỏi cửa sổ (trong phương thức leaveEvent()) và thả chuột trên enterEvent(). – baysmith
Sau khi thêm grabMouse(), nó vẫn chỉ cập nhật khi chuột đi qua cửa sổ ứng dụng – Switch