标签:mouseReleaseEvent Qt pos mouseMoveEvent event rect 鼠标
一、概述
案例:在使用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(); } }
标签:mouseReleaseEvent,Qt,pos,mouseMoveEvent,event,rect,鼠标 来源: https://www.cnblogs.com/tony-yang-flutter/p/16142685.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。