Qt--在Label上画矩形

1、实现方法:

需要继承QLabel并重写以下函数实现:

void mousePressEvent(QMouseEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
void paintEvent(QPaintEvent *);

2、源代码如下:

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>
#include <QMouseEvent>
#include <QDebug>
#include <QPaintEvent>
#include <QPainter>

class MyLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MyLabel(QWidget *parent = 0);

protected:
    void mousePressEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);

    void paintEvent(QPaintEvent *);

private:
    int x1;
    int x2;
    int y1;
    int y2;
};
#endif // MYLABEL_H

mylabel.cpp

#include "mylabel.h"

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{

}

void MyLabel::paintEvent(QPaintEvent *)
{
    QPainter painter(this);

    painter.setPen(QPen(Qt::red, 2));
    painter.drawRect(QRect(x1, y1, x2 - x1, y2 - y1));
}

void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    x1 = ev->x();
    y1 = ev->y();
}

void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
    x2 = ev->x();
    y2 = ev->y();
    update();
}

void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{

}

3、效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值