#ifndef DIALOGIMAGEVIEWER_H #define DIALOGIMAGEVIEWER_H #include #include #include #include #include /** * @brief 图像查看对话框 * 支持滚轮缩放、拖拽平移、双击还原 */ class DialogImageViewer : public QDialog { Q_OBJECT public: explicit DialogImageViewer(QWidget* parent = nullptr); ~DialogImageViewer(); /** * @brief 设置要显示的图像 * @param image 图像 * @param title 标题 */ void setImage(const QImage& image, const QString& title = ""); protected: 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; private: void setupUI(); void updateImageDisplay(); void resetZoom(); private: QScrollArea* m_scrollArea = nullptr; QLabel* m_imageLabel = nullptr; QLabel* m_infoLabel = nullptr; QImage m_originalImage; double m_scaleFactor = 1.0; bool m_dragging = false; QPoint m_lastPos; static constexpr double MIN_SCALE = 0.1; static constexpr double MAX_SCALE = 10.0; static constexpr double SCALE_STEP = 0.1; }; #endif // DIALOGIMAGEVIEWER_H