#ifndef NMWXPEBIRESULTANIMATIONEXPORTDLG_H #define NMWXPEBIRESULTANIMATIONEXPORTDLG_H #include "nmSubWxs_global.h" #include "nmPebiResultAnimationExportSettings.h" #include #include #include class QComboBox; class QLabel; class QSpinBox; /** @brief 编辑当前动态结果的动画导出参数,不选择目标文件。 */ class NM_SUB_WXS_EXPORT nmWxPebiResultAnimationExportDlg : public QDialog { Q_OBJECT public: /** * @brief 创建动画导出参数对话框。 * @param vecFrameTimesHours 动态属性各帧对应的小时值。 * @param oCurrentViewportSize 当前QVTK视口的像素尺寸。 * @param pParent Qt父窗口。 */ explicit nmWxPebiResultAnimationExportDlg( const QVector& vecFrameTimesHours, const QSize& oCurrentViewportSize, QWidget* pParent = nullptr); /** @brief 返回用户确认后的参数;仅在对话框Accepted后使用。 */ nmPebiResultAnimationExportSettings getSettings() const; private slots: /** @brief 保证结束帧不早于起始帧,并刷新采样上限和摘要。 */ void onFrameRangeChanged(); /** @brief 应用当前视口或固定分辨率,并切换自定义输入可用状态。 */ void onResolutionPresetChanged(int nIndex); /** @brief 在输入完成后把自定义宽高向上规范为偶数。 */ void normalizeCustomDimensions(); /** @brief 按当前参数刷新输出帧数和预计时长。 */ void updateSummary(); /** @brief 规范化并严格校验参数,成功后接受对话框。 */ void acceptSettings(); private: Q_DISABLE_COPY(nmWxPebiResultAnimationExportDlg) /** @brief 对话框内置的输出分辨率来源。 */ enum ResolutionPreset { /** 使用打开对话框时记录的QVTK视口尺寸。 */ Resolution_CurrentView = 0, /** 固定输出1280x720。 */ Resolution_720p, /** 固定输出1920x1080。 */ Resolution_1080p, /** 使用用户输入的宽度和高度。 */ Resolution_Custom }; /** @brief 创建全部控件并建立信号连接。 */ void createUi(); /** @brief 将小时值及其零基帧下标填入起止帧下拉框。 */ void populateFrameItems(); /** @brief 从控件收集一份不改变界面状态的规范化参数。 */ nmPebiResultAnimationExportSettings collectSettings() const; /** @brief 将像素尺寸限制到2~8192并向上修正为偶数。 */ static int normalizeEvenDimension(int nValue); /** @brief 各零基帧下标对应的时间,单位为小时。 */ QVector m_vecFrameTimesHours; /** @brief 打开对话框时冻结的QVTK视口像素尺寸。 */ QSize m_oCurrentViewportSize; /** @brief 用户确认后保存的规范化导出参数。 */ nmPebiResultAnimationExportSettings m_oAcceptedSettings; /** @brief 目标视频帧率输入框。 */ QSpinBox* m_pFpsSpinBox; /** @brief 导出闭区间的起始帧下拉框。 */ QComboBox* m_pStartFrameCombo; /** @brief 导出闭区间的结束帧下拉框。 */ QComboBox* m_pEndFrameCombo; /** @brief 原始结果帧采样间隔输入框。 */ QSpinBox* m_pSamplingIntervalSpinBox; /** @brief 当前视口、固定尺寸和自定义尺寸的选择框。 */ QComboBox* m_pResolutionCombo; /** @brief 输出宽度输入框,界面最终显示偶数像素值。 */ QSpinBox* m_pWidthSpinBox; /** @brief 输出高度输入框,界面最终显示偶数像素值。 */ QSpinBox* m_pHeightSpinBox; /** @brief 按当前帧范围和采样间隔计算的输出帧数。 */ QLabel* m_pOutputFrameCountLabel; /** @brief 按输出帧数和帧率计算的预计视频时长。 */ QLabel* m_pEstimatedDurationLabel; /** @brief 参数校验失败时显示的错误文字。 */ QLabel* m_pErrorLabel; }; #endif // NMWXPEBIRESULTANIMATIONEXPORTDLG_H