59 lines
2.0 KiB
C++
59 lines
2.0 KiB
C++
/* Окно просмотра локального изображения: масштаб колесом, перенос мышью и 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;
|
|
};
|