QT5鼠標移動事件的使用
- 1.開啟跟蹤鼠標,在構造函數中使用如下函數
this->setMouseTracking(true);
- 2.復寫“鼠標移動事件”函數
//mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
//鼠標移動事件
void mouseMoveEvent(QMouseEvent *event);
private:
Ui::MainWindow *ui;
QLabel *labelPos;
};
//mainwindow.cpp
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
labelPos->setText(QString("%1: (%2, %3)").arg("current pos").arg(event->pos().x()).arg(event->pos().y()));
}
-
3.問題
這樣設置后,在mainWindow窗口,無法撲捉沒有鼠標按鍵按下的移動,只撲捉到有按鍵按下的移動事件。 -
4.解決
bool mouseTracking
這個屬性保存的是窗口部件跟蹤鼠標是否生效。
如果鼠標跟蹤失效(默認),當鼠標被移動的時候只有在至少一個鼠標按鍵被按下時,這個窗口部件才會接收鼠標移動事件。
如果鼠標跟蹤生效,如果沒有按鍵被按下,這個窗口部件也會接收鼠標移動事件。
QWidget中使用是沒有問題的,但是,對於QMainWindow即使使用了setMouseTracking(true)依然無法捕捉到鼠標沒有按下的移動,只有在鼠標按下是才能捕捉。
解決辦法:要先把QMainWindow的CentrolWidget使用setMouseTracking(true)開啟移動監視。然后在把QMainWindow的setMouseTracking(true)開啟監視。
在構造函數加入如下語句
ui->centralWidget->setMouseTracking(true);
詳細介紹:https://blog.csdn.net/yu132563/article/details/53028226