Qt在QLabel显示图片并绘制矩形框

利用QLabel显示图片,在里面进行矩形框的显示。下面就是一个简单的事例。

 

首先重新定义一个自己的类,用来重新定义函数paintEvent ( QPaintEvent * ) 

class QtLabel :public QLabel
{
public:
    QtLabel();
    ~QtLabel();
    int x,y,w,h;

    void paintEvent(QPaintEvent *event);

    void DrawRangle(int x ,int y ,int h,int w);
};

paintEvent ( QPaintEvent * ) 是一个虚保护函数,只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它。下面就是看看如何定义的

void QtLabel::paintEvent(QPaintEvent *event)
{
    QLabel::paintEvent(event);
    QPainter painter(this);
    painter.setPen(QPen(Qt::red,10));
    painter.drawRect(QRect(x,y,w,h));
}

这里就是重新定义虚函数paintEvent,第一句话就是先调用父辈的event,就可以显示出背景图片。不然就只有一个矩形框。本来应该是下面的样子

Qt在QLabel显示图片并绘制矩形框_第1张图片如果没有第一句话,就会纸下面这个样子

Qt在QLabel显示图片并绘制矩形框_第2张图片

没有背景图片。

 

那么如何使用这个函数呢?repaint()或update()时调用。

void QtLabel::DrawRangle(int xx, int yy, int hh, int ww)
{
    x = xx ;
    y = yy ;
    w = ww ;
    h = hh ;

    update();

}

这里调用update().

 

下面就是看看如何显示并绘制矩形框

     QImage* img=new QImage;
     img->load("/home/yu/Desktop/Person/person/person/image/1.jpg");

     lab.setPixmap(QPixmap::fromImage(*img));
     lab.DrawRangle(x,y,h,w);
     delete img;
     lab.show();

这里就没有什么多说的。

 

小结:

这里只是一个简单的事例,具体原理与架构还是很值得深究的。

你可能感兴趣的:(Qt,c++,qt)