鼠标选框事件

#include "widget.h"
#include "ui_widget.h"
#include <QtWidgets>


widget::widget(QWidget *parent)
 : QMainWindow(parent)
{
 ui.setupUi(this);
 m_isDown = false;

}

widget::~widget()
{
delete ui;
}

void widget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() && Qt::LeftButton){
        m_isDown = true;
        m_start = e->pos();
        m_stop = e->pos();
    }
}

void widget::mouseMoveEvent(QMouseEvent *e)
{
    if(m_isDown){
        m_stop = e->pos();
    }
    update();
}

void widget::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() && Qt::LeftButton){
        m_isDown = false;
    }
}

void widget::paintEvent(QPaintEvent *)
{  
    if(!m_isDown){
        return;
    }
    QPainter p(this);
    p.drawRect(QRect(m_start,m_stop));
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用OpenCV中的鼠标事件来实现实时选框显示,具体实现步骤如下: 1. 创建一个名为“image”的窗口,并在其中显示一张图片。 2. 定义一个鼠标回调函数,该函数将在鼠标事件发生时被调用。 3. 在鼠标回调函数中,根据鼠标事件的类型来进行相应的操作。例如,在鼠标按下时,记录下鼠标的起始坐标;在鼠标移动时,计算出选框的大小和位置,并在图像中绘制选框;在鼠标释放时,将选框的大小和位置保存下来。 4. 在主循环中,不断地显示图像,并检测是否有鼠标事件触发,如果有,则调用鼠标回调函数进行处理。 以下是示例代码: ```python import cv2 # 定义鼠标回调函数 def mouse_callback(event, x, y, flags, param): global x_start, y_start, x_end, y_end, drawing if event == cv2.EVENT_LBUTTONDOWN: drawing = True x_start, y_start = x, y elif event == cv2.EVENT_MOUSEMOVE: if drawing: x_end, y_end = x, y elif event == cv2.EVENT_LBUTTONUP: drawing = False x_end, y_end = x, y cv2.rectangle(img, (x_start, y_start), (x_end, y_end), (0, 255, 0), 2) # 创建窗口并显示图片 img = cv2.imread('test.jpg') cv2.namedWindow('image') cv2.imshow('image', img) # 注册鼠标回调函数 cv2.setMouseCallback('image', mouse_callback) # 主循环 drawing = False while True: cv2.imshow('image', img) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() ``` 在这个示例代码中,我们首先创建了一个名为“image”的窗口,并在其中显示了一张名为“test.jpg”的图片。然后我们定义了一个名为“mouse_callback”的鼠标回调函数,该函数将在鼠标事件发生时被调用。在函数中,我们根据鼠标事件的类型来进行相应的操作,包括记录起始坐标、计算选框大小和位置、绘制选框、保存选框大小和位置等。在主循环中,我们不断地显示图像,并检测是否有鼠标事件触发,如果有,则调用鼠标回调函数进行处理。最后,在按下“q”键后退出程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值