You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmSubWxs/nmWxPebiResultAnimationExpo...

102 lines
3.9 KiB
C

#ifndef NMWXPEBIRESULTANIMATIONEXPORTDLG_H
#define NMWXPEBIRESULTANIMATIONEXPORTDLG_H
#include "nmSubWxs_global.h"
#include "nmPebiResultAnimationExportSettings.h"
#include <QDialog>
#include <QSize>
#include <QVector>
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<double>& 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<double> 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