Qt中在QLabel上画点,重写QLabel类

本文介绍了如何在Qt中创建一个自定义的QLabel类,重写鼠标点击和绘图事件,实现在Label上动态绘制点。通过继承QLabel并添加特定事件处理,用户可以控制何时启用绘图并记录坐标点。

Qt中在QLabel上画点,重写QLabel类

QT中label进行绘图

1.首先新建一个类,让这个类继承QLabel
2.在类中对鼠标点击事件及绘图事件进行重写
3.然后在UI框架下添加label控件,
4.右键label控件,添加重写的类,将其提升为刚刚写好的类

mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QObject>
#include <QLabel>
#include <QMouseEvent>
#include <QPainter>
#include <QPen>
#include <QPoint>


class MyLabel : public QLabel

{

    Q_OBJECT

public:

    int labelWidth;
    int labelHeight;

    struct pointCoord{
        int x;
        int y;
    };

    std::vector<pointCoord> coordList;

    bool paintEnable = true;

public:

    explicit MyLabel(QWidget *parent = 0);

    void enabelPaint(bool);

    void mousePressEvent(QMouseEvent *event);

    void paintEvent(QPaintEvent *event);

//    void mouseReleaseEvent(QMouseEvent *event);

//    void mouseMoveEvent(QMouseEvent *event);


signals:
    void updatePoint(int x, int y, int labelWidth, int labelHeight);

};


#endif // MYLABEL_H

mylabel.cpp

#include "mylabel.h"

#include <QMessageBox>

#include <QString>

#include <QDebug>


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

{
;
}

void MyLabel::enabelPaint(bool enable){
    if (enable){
        paintEnable = true;
    } else {
        paintEnable = false;
    }

}

void MyLabel::mousePressEvent(QMouseEvent *event)

{
    if (paintEnable){
        int x = event->position().x();

        int y = event->position().y();

        pointCoord coord;
        coord.x = x;
        coord.y = y;

        coordList.push_back(coord);
        labelWidth = this->width();
        labelHeight = this->height();


        emit updatePoint(x, y, labelWidth, labelHeight);
        update();
    }

}


void MyLabel::paintEvent(QPaintEvent *event)

{

    QLabel::paintEvent(event);



    QPainter painter(this);

    QPen pen;       //设置画笔,颜色、宽度

    pen.setColor(Qt::red);

    pen.setWidth(5);

    painter.setPen(pen);


    for (auto coord:coordList){
        painter.drawPoint(coord.x, coord.y);
    }

}
### 如何在 Qt QLabel 上绘制矩形 要在 `QLabel` 控件上绘制矩形,通常的做法是通过自定义子化 `QLabel` 并重写其 `paintEvent()` 方法,在该方法内部使用 `QPainter` 进行绘图操作。下面是一个具体的例子说明如何实现这一点。 #### 创建自定义的 QLabel 首先创建一个新的继承于 `QLabel` ,在这个新的里头重新实现了 `paintEvent` 函数用于处理绘画逻辑[^4]: ```cpp class MyLabel : public QLabel { protected: void paintEvent(QPaintEvent *event) override; }; ``` #### 实现 paintEvent 函数 接着是在这个新中具体实现 `paintEvent` 函数的内容。这里设置了一个红色笔触宽度为2像素的画笔,并指定要绘制的矩形位置和大小参数 (x, y, w, h),最后调用 `drawRect` 来完成实际的绘制工作: ```cpp void MyLabel::paintEvent(QPaintEvent *event) { QLabel::paintEvent(event); // 调用基版本以确保正常显示背景图像等内容 QPainter painter(this); QPen pen(Qt::red, 2); painter.setPen(pen); int x = 50; // 假设起始坐标X=50 int y = 50; // Y=50 int width = 100; // 宽度W=100 int height = 80; // 高度H=80 painter.drawRect(x, y, width, height); } ``` 需要注意的是如果希望在带有图片的 `QLabel` 上面覆盖绘制,则应该避免直接调用 `setPixmap()` 设置图片,而是采用 `QPainter::drawPixmap()` 的方式加载底图,这样可以防止后续绘制的操作被遮盖住[^3]。 以上就是关于怎样在一个基于 Qt 框架的应用程序里的 `QLabel` 组件之上添加矩形绘制功能的一个简单介绍以及相应代码片段展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值