Qt的mouseMoveEvent捕獲鼠標事件不生效的解決辦法


一、概述

  案例:在使用OpenCV的grabCut算法實現簡單摳圖操作的時候(因為使用到了鼠標坐標選擇目標區域),使用到的Qt的鼠標的mousePressEvent(按下)、mouseMoveEvent(移動)、mouseReleaseEvent(釋放)事件。實驗下來其中只有mousePressEvent生效。看了一大堆的資料:說的最多的是設置setMouseTracking(true),但是在我這里行不通。

  解決辦法:1.在mousePressEvent中調用grabMouse()方法 2.在mouseReleaseEvent中調用releaseMouse()方法。這樣親測能夠解決

  ps:在這里做一個記錄供以后遇到了好查看,也給其他的小伙伴帶去一點小思路。下面是樣例圖:

 

 

二、代碼樣例

void CrabCut_Matting::mouseMoveEvent(QMouseEvent *event){
//    if(event->button()==Qt::LeftButton){//鼠標左鍵
        rect = Rect(Point(rect.x, rect.y), Point(event->pos().x(), event->pos().y()));
        qDebug()<<"mouseMoveEvent:"<<rect.width<<"|"<<rect.height;
        showImage();
//    }
}

void CrabCut_Matting::mousePressEvent(QMouseEvent *event){
    grabMouse();
    if(event->button()==Qt::LeftButton){//鼠標左鍵
        rect.x = event->pos().x();
        rect.y = event->pos().y();
        rect.width = 1;
        rect.height = 1;
        init = false;
        numRun = 0;
        qDebug()<<"mousePressEvent:"<<event->pos().x()<<"|"<<event->pos().y();
    }

}

void CrabCut_Matting::mouseReleaseEvent(QMouseEvent *event){
    releaseMouse();
    if(event->button()==Qt::LeftButton){//鼠標左鍵
        if (rect.width > 1 && rect.height > 1) {
            setROIMask();
            showImage();
            qDebug()<<"mouseReleaseEvent:"<<rect.width<<"|"<<rect.height;
        }
        //執行grabcut的代碼
        runGrabCut();
        numRun++;
        showImage();
    }
}

 


免責聲明!

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



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