#pragma once #include #include #include #include class QLabel; class QPushButton; class ImageCropDialog final : public QDialog { Q_OBJECT public: explicit ImageCropDialog(const QString& imagePath, QWidget* parent = nullptr); bool hasValidSelection() const; QRect selectedRectInImagePixels() const; private slots: void onReset(); void onOk(); private: void loadImageOrClose(); void rebuildUi(); private: class CropView; CropView* m_view = nullptr; QPushButton* m_okButton = nullptr; QString m_imagePath; QImage m_image; /// read() 前 reader.size() 得到的原图逻辑尺寸(与 m_image 可能为缩放预览不一致) QSize m_sourceLogicalSize; };