Files
qad/libs/widgets/image_view.h
2023-03-07 13:54:14 +03:00

78 lines
2.3 KiB
C++

/*
QAD - Qt ADvanced
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef IMAGE_VIEW_H
#define IMAGE_VIEW_H
#include "qad_widgets_export.h"
#include <QGraphicsView>
class QGraphicsPixmapItem;
class QAD_WIDGETS_EXPORT ImageView: public QGraphicsView {
Q_OBJECT
Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
Q_PROPERTY(bool viewInteractive READ viewInteractive WRITE setViewInteractive)
Q_PROPERTY(bool smoothBigImages READ isSmoothBigImages WRITE setSmoothBigImages)
public:
ImageView(QWidget * parent = nullptr);
~ImageView() override;
void setImage(const QImage & i, bool save = true);
void setImage(const QByteArray & i);
QByteArray image() const { return im_data; }
QPixmap pixmap() const;
bool viewInteractive() const { return interactive_; }
void clear();
bool isSmoothBigImages() const { return smooth_big; }
void setSmoothBigImages(bool yes);
public slots:
void autofit();
void setPixmap(QPixmap pixmap);
void setViewInteractive(bool yes);
signals:
void clicked(QPointF, Qt::MouseButtons);
void hovered(QPointF, Qt::MouseButtons);
void released(QPointF, Qt::MouseButtons);
private:
void mouseDoubleClickEvent(QMouseEvent *) override;
void mousePressEvent(QMouseEvent * e) override;
void mouseMoveEvent(QMouseEvent * e) override;
void mouseReleaseEvent(QMouseEvent * e) override;
void wheelEvent(QWheelEvent * e) override;
bool eventFilter(QObject * o, QEvent * e) override;
void adjustView();
QGraphicsPixmapItem * item;
QByteArray im_data;
QPoint prev_pos;
bool autofit_, interactive_, smooth_big;
QPixmap map;
};
#endif // IMAGE_VIEW_H