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