1. 程式人生 > >Qt Creator中如何在QLabel上畫矩形框並且保存畫完後的圖形

Qt Creator中如何在QLabel上畫矩形框並且保存畫完後的圖形

ima int BE 畫的 see date() name mov drawrect

問題描述:

在QLabel上顯示一張圖片,然後在該圖片上畫一個矩形框 最後保存一張帶矩形框的圖片

第一步:

在圖片上畫矩形框 網上教程很多 代碼如下: 頭文件

#ifndef MYQLABEL
#define MYQLABEL

#include <QLabel>
#include <QMouseEvent>
#include <QString>

class MyQLabel : public QLabel{
//    Q_OBJECT
public:
//    explicit MyQLabel();
    void paintEvent(QPaintEvent* event);
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent* event);
    void mouseMoveEvent(QMouseEvent* event);
    int x1, y1, x2, y2;

    void savePicture(QString path, int filename);

public:
    int getX1() {return x1;}
    int getY1() {return y1;}
    int getX2() {return x2;}
    int getY2() {return y2;}
};

#endif // MYQLABEL

源文件:

#include <QPainter>
#include <QPen>
#include <QRect>
#include <QCursor>
#include <QApplication>
#include <QPixmap>
#include <QImage>

#include "myqlabel.h"

void MyQLabel::paintEvent(QPaintEvent *event)
{
    //comment before
    QLabel::paintEvent(event); //繪制背景的圖片

    QPainter painter(this);

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

void MyQLabel::mousePressEvent(QMouseEvent *event)
{
    x1 = event->pos().x();
    y1 = event->pos().y();
    QCursor cursor;
    cursor.setShape(Qt::ClosedHandCursor);
    QApplication::setOverrideCursor(cursor);
}

void MyQLabel::mouseReleaseEvent(QMouseEvent *event)
{
    x2 = event->pos().x(); //鼠標相對於所在控件的位置
    y2 = event->pos().y();
    update();
    QApplication::restoreOverrideCursor();

}

void MyQLabel::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton) {
        x2 = event->pos().x(); //鼠標相對於所在控件的位置
        y2 = event->pos().y();
        update();
    }
}

第二步:

保存畫完後的整個圖形

思路如下:

取得QLabel上的圖像 將其加入到一個Painter 然後獲取之前畫的矩形框的 起始 和終止坐標 重新繪制 然後保存

QImage tmpimage = image.copy();

    QPixmap pmap;
    pmap = pmap.fromImage(tmpimage);
    label_video1->setPixmap(pmap);

    QImage img(label_video1->pixmap()->toImage());
    QPainter painter;
    painter.begin(&img);
    painter.setPen(QPen(Qt::red, 2));
    painter.drawRect(QRect(label_video1->getX1(), label_video1->getY1(),
                           label_video1->getX2() - label_video1->getX1(),
                           label_video1->getY2() - label_video1->getY1()));
    painter.end();
    label_video2->setPixmap(QPixmap::fromImage(img));

Qt Creator中如何在QLabel上畫矩形框並且保存畫完後的圖形