QT 通过鼠标拖动实现框选

功能:QT 实现框选

QT 通过鼠标拖动实现框选

实现移动鼠标时,能够进行框选。需要三个鼠标事件,一个画图事件,用来画长方形
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);

画长方形需要记住左上角的点和长,宽,利用链表来记录点。当鼠标按下时,记录下第一个点,而当鼠标移动时,记录如果链表中只有一个点则将新的点加入,如果链表中已经有两个点了,需要将链表中的第二个点删除,将最新的点进行添加。

void Widget::mousePressEvent(QMouseEvent *event)
{
    if (m_dh_video != NULL) {     
        appendPoints(event->pos());
        printf("mousePressEvent \n");
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if (m_dh_video != NULL) {
        append(event->pos());
        update();
    }
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
        append(event->pos());
        update();  // 启动paintEvent
       //  mouseReleaseAndControl();  // 在鼠标释放后调用快速定位的功能
        drawParamList.clear();

}
 void Widget::draw(QPainter& painter, QList<QPoint>& param)
 {
     if (param.count() >= 2) {
         int x = (param[0].x() < param[1].x()) ? param[0].x() : param[1].x();
         int y = (param[0].y() < param[1].y()) ? param[0].y() : param[1].y();
         int w = qAbs(param[0].x() - param[1].x()) + 1;
         int h = qAbs(param[0].y() - param[1].y()) + 1;
         painter.drawRect(x, y, w, h);  // 画长方形
     }
 }
 void Widget::paintEvent(QPaintEvent *event)
 {
     QPainter painter(this);
     painter.setPen(Qt::blue);
     draw(painter, drawParamList);  // 

 }
void Widget::appendPoints(QPoint p)
{
    if ( drawParamList.count() == 2 ) {
        drawParamList.removeLast(); // 移除最后一个点
    }
    drawParamList.append(p);
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值