You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
58 lines
2.0 KiB
/* Окно просмотра локального изображения: масштаб колесом, перенос мышью и fullscreen. |
|
* loadFile загружает изображение; closed сообщает владельцу о закрытии окна. */ |
|
#pragma once |
|
|
|
#include <QWidget> |
|
#include <QPixmap> |
|
|
|
class QPushButton; |
|
class QLabel; |
|
class QTimer; |
|
class QPropertyAnimation; |
|
class QGraphicsOpacityEffect; |
|
|
|
class ImageViewerWindow : public QWidget { |
|
Q_OBJECT |
|
public: |
|
explicit ImageViewerWindow(QWidget *parent = nullptr); |
|
void loadFile(const QString& path); |
|
void loadImage(const QImage& image); |
|
void setPlaceholder(const QString& text) { m_placeholder = text; update(); } |
|
|
|
signals: |
|
void closed(); |
|
|
|
protected: |
|
void paintEvent(QPaintEvent *event) override; |
|
void wheelEvent(QWheelEvent *event) override; |
|
void mousePressEvent(QMouseEvent *event) override; |
|
void mouseMoveEvent(QMouseEvent *event) override; |
|
void mouseReleaseEvent(QMouseEvent *event) override; |
|
void mouseDoubleClickEvent(QMouseEvent *event) override; |
|
void keyPressEvent(QKeyEvent *event) override; |
|
void closeEvent(QCloseEvent *event) override; |
|
void resizeEvent(QResizeEvent *event) override; |
|
|
|
private: |
|
void resetView(); |
|
void clampOffset(); |
|
void showOverlay(); |
|
void hideOverlay(); |
|
void fadeTo(QPropertyAnimation* anim, QGraphicsOpacityEffect* eff, |
|
int durMs, double target); |
|
|
|
QPixmap m_image; |
|
QString m_placeholder; |
|
double m_scale = 1.0; |
|
QPointF m_offset; /* смещение изображения в пикселях виджета */ |
|
bool m_dragging = false; |
|
QPointF m_dragStart; |
|
QPointF m_offsetStart; |
|
QPushButton* m_closeBtn = nullptr; |
|
QGraphicsOpacityEffect* m_closeEffect = nullptr; |
|
QPropertyAnimation* m_closeFade = nullptr; |
|
QLabel* m_hintLabel = nullptr; |
|
QGraphicsOpacityEffect* m_hintEffect = nullptr; |
|
QPropertyAnimation* m_hintFade = nullptr; |
|
QTimer* m_hideTimer = nullptr; |
|
};
|
|
|