QT界面上显示图片,可缩放和绘制矩形ROI框
鉴于搜了半天网站都没有我想实现的roi截取框,我就自己实现一个
用到了QGraphicsView、QGraphicsScene、QGraphicsPixmapItem、QGraphicsRectItem、QGraphicsTextItem类。
刚开始学QT,照猫画虎
实现效果如下:
QT界面显示图片
1.第一步,继承QGraphicsView创建自己的子类。
class MyGraphicsView: public QGraphicsView
{
Q_OBJECT
public:
MyGraphicsView(QWidget* parent = nullptr);
~MyGraphicsView();
}
2.第二步,重写鼠标和滚轮事件
protected:
void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event);
3.第三步,写传入图片的接口函数和发送roi坐标的信号函数
public:
void setImage(QPixmap); //外部传入图片
signals:
void Send_rect(QPointF, QPointF);
4.使用的时候,在QT creater中将graphicsView提升为MyGraphicsView,并加载一张图片
ui->graphicsView->setImage(QPixmap("C:\\Users\\xxx\\Pictures\\1.bmp"));
整个头文件如下(cpp也上传了的):
#pragma once
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include <QMouseEvent>
#include <QGraphicsRectItem>
class MyGraphicsView: public QGraphicsView
{
Q_OBJECT
public:
MyGraphicsView(QWidget* parent = nullptr);
~MyGraphicsView();
void setImage(QPixmap); //外部传入图片
protected:
void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event);
signals:
void Send_rect(QPointF, QPointF);
private:
QGraphicsScene* scene = nullptr;
QPixmap m_image;
QPointF start_point;
QPointF end_point;
QPointF move_point;
QGraphicsPixmapItem* item = nullptr;
QGraphicsRectItem* item_rect = nullptr;
QGraphicsTextItem* item_text = nullptr;
double ratio = 1.0;
QRect paint_rect; //绘画限制区域
bool m_isDown = false;
};