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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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