問題描述:
在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));
