#ifndef IMAGEMODEL_H
#define IMAGEMODEL_H
#include <QObject>
#include <QWidget>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QPainter>
#include <QDebug>
#include <QAbstractSlider>
{
Q_OBJECT
public:
explicit ImageWidget
(QWidget *parent
);
void setImage
(QImage* image,
bool bResetRoi
);
public slots:
void on_setVScrollValue(int value);
void on_setHScrollValue(int value);
signals:
private:
};
#endif // IMAGEMODEL_H
#ifndef IMAGEMODEL_H
#define IMAGEMODEL_H
#include <QObject>
#include <QWidget>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QPainter>
#include <QDebug>
#include <QAbstractSlider>
class ImageWidget : public QWidget
{
Q_OBJECT
public:
static QImage defaultImage();
explicit ImageWidget(QWidget *parent);
void setImage(QImage* image,bool bResetRoi);
QRectF getRoi();
void setRoi(QRectF newRoi);
QSize getImgSize();
public slots:
void on_setVScrollValue(int value);
void on_setHScrollValue(int value);
signals:
void resetRoi(QRectF roi);
private:
QImage m_img;
QRectF m_roi;
QRectF m_borders;
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
};
#endif // IMAGEMODEL_H
To copy to clipboard, switch view to plain text mode
#include "imagewidget.h"
QImage ImageWidget
::defaultImage() {
painter.
setPen(QPen(Qt
::black));
painter.
setBrush(QBrush(Qt
::black,Qt
::SolidPattern));
return img;
}
ImageWidget
::ImageWidget(QWidget* parent
){
m_roi = rect() - contentsMargins();
if(m_roi.width() > m_roi.height())
m_borders.
setSize(QSizeF(m_roi.
width(),m_roi.
width()));
else
m_borders.
setSize(QSizeF(m_roi.
height(),m_roi.
height()));
qDebug()<<m_roi;
}
void ImageWidget
::setImage(QImage *image,
bool bResetRoi
) {
if(!image) return;
if(!bResetRoi)
{
m_img = *image;
update();
return;
}
m_img = *image;
qDebug()<<m_roi;
m_borders.setSize(m_img.size() * 1.2);
m_borders.moveCenter(m_img.rect().center());
update();
}
{
return m_roi;
}
void ImageWidget
::setRoi(QRectF newRoi
) {
bool bNormal = true;
if(newRoi.height() < m_borders.height())
{
if(newRoi.top() < m_borders.top())
{
newRoi.moveTop(m_borders.top());
bNormal = false;
}
if(newRoi.bottom() > m_borders.bottom())
{
newRoi.moveBottom(m_borders.bottom());
bNormal = false;
}
}
else
{
newRoi.
moveCenter(QPointF(newRoi.
center().
x(),
m_borders.center().y())
);
}
if(newRoi.width() < m_borders.width())
{
if(newRoi.left() < m_borders.left())
{
newRoi.moveLeft(m_borders.left());
bNormal = false;
}
if(newRoi.right() > m_borders.right())
{
newRoi.moveRight(m_borders.right());
bNormal = false;
}
}
else
{
newRoi.
moveCenter(QPointF(m_borders.
center().
x(),
newRoi.center().y())
);
}
if(!bNormal) emit resetRoi(newRoi);
m_roi = newRoi;
qDebug()<<m_roi;
}
QSize ImageWidget
::getImgSize() {
if(m_img.isNull())
return size();
return m_img.size();
}
void ImageWidget::on_setVScrollValue(int value)
{
m_roi.moveTop(value);
qDebug()<<m_roi;
emit resetRoi(m_roi);
update();
}
void ImageWidget::on_setHScrollValue(int value)
{
m_roi.moveLeft(value);
qDebug()<<m_roi;
emit resetRoi(m_roi);
update();
}
{
if(m_img.isNull())
{
return;
}
if(m_img.
format() == QImage::Format_Invalid) {
return;
}
painter.
setRenderHint(QPainter::SmoothPixmapTransform,
true);
painter.
setRenderHint(QPainter::HighQualityAntialiasing,
true);
blackBrush.
setColor(QColor(Qt
::black));
blackBrush.setStyle(Qt::SolidPattern);
painter.
setBackground(QBrush(Qt
::black));
painter.setBrush(blackBrush);
painter.drawRect(event->rect());
painter.drawImage(event->rect(),m_img,m_roi.toRect());
}
{
}
#include "imagewidget.h"
QImage ImageWidget::defaultImage()
{
QImage img(100,100,QImage::Format::Format_Invalid);
QPainter painter(&img);
painter.setPen(QPen(Qt::black));
painter.setBrush(QBrush(Qt::black,Qt::SolidPattern));
painter.drawRect(QRect(QPoint(0,0),QSize(100,100)));
return img;
}
ImageWidget::ImageWidget(QWidget* parent)
: QWidget(parent)
{
m_roi = rect() - contentsMargins();
if(m_roi.width() > m_roi.height())
m_borders.setSize(QSizeF(m_roi.width(),m_roi.width()));
else
m_borders.setSize(QSizeF(m_roi.height(),m_roi.height()));
qDebug()<<m_roi;
}
void ImageWidget::setImage(QImage *image,bool bResetRoi)
{
if(!image) return;
if(!bResetRoi)
{
m_img = *image;
update();
return;
}
m_img = *image;
m_roi = QRect(QPoint(0,0),size()) - contentsMargins();
qDebug()<<m_roi;
m_borders.setSize(m_img.size() * 1.2);
m_borders.moveCenter(m_img.rect().center());
update();
}
QRectF ImageWidget::getRoi()
{
return m_roi;
}
void ImageWidget::setRoi(QRectF newRoi)
{
bool bNormal = true;
if(newRoi.height() < m_borders.height())
{
if(newRoi.top() < m_borders.top())
{
newRoi.moveTop(m_borders.top());
bNormal = false;
}
if(newRoi.bottom() > m_borders.bottom())
{
newRoi.moveBottom(m_borders.bottom());
bNormal = false;
}
}
else
{
newRoi.moveCenter(QPointF(newRoi.center().x(),
m_borders.center().y())
);
}
if(newRoi.width() < m_borders.width())
{
if(newRoi.left() < m_borders.left())
{
newRoi.moveLeft(m_borders.left());
bNormal = false;
}
if(newRoi.right() > m_borders.right())
{
newRoi.moveRight(m_borders.right());
bNormal = false;
}
}
else
{
newRoi.moveCenter(QPointF(m_borders.center().x(),
newRoi.center().y())
);
}
if(!bNormal) emit resetRoi(newRoi);
m_roi = newRoi;
qDebug()<<m_roi;
}
QSize ImageWidget::getImgSize()
{
if(m_img.isNull())
return size();
return m_img.size();
}
void ImageWidget::on_setVScrollValue(int value)
{
m_roi.moveTop(value);
qDebug()<<m_roi;
emit resetRoi(m_roi);
update();
}
void ImageWidget::on_setHScrollValue(int value)
{
m_roi.moveLeft(value);
qDebug()<<m_roi;
emit resetRoi(m_roi);
update();
}
void ImageWidget::paintEvent(QPaintEvent *event)
{
if(m_img.isNull())
{
QWidget::paintEvent(event);
return;
}
if(m_img.format() == QImage::Format_Invalid)
{
QWidget::paintEvent(event);
return;
}
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
painter.setRenderHint(QPainter::HighQualityAntialiasing, true);
QBrush blackBrush;
blackBrush.setColor(QColor(Qt::black));
blackBrush.setStyle(Qt::SolidPattern);
painter.setBackground(QBrush(Qt::black));
painter.setBrush(blackBrush);
painter.drawRect(event->rect());
painter.drawImage(event->rect(),m_img,m_roi.toRect());
}
void ImageWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
}
To copy to clipboard, switch view to plain text mode
Bookmarks