QT5 mouseMoveEvent事件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM