From 6bf1d2894077b501d005da01b4adcd98297b087b Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Sun, 20 Sep 2026 16:11:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E6=92=AD=E6=94=BE=E9=80=9F=E5=BA=A6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除每秒 60 步的播放速度上限,支持正整数范围输入 - 保留最小 1ms 的定时器间隔,避免高速设置产生零间隔 - 对话框显示后自动聚焦并全选当前速度 - 移除标题栏帮助按钮并统一确定、取消按钮样式 - 更新播放速度校验提示、接口注释和中文翻译资源 --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 147846 -> 147809 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 2 +- .../nmSubWxs/nmPebiResultPlaybackController.h | 3 +- .../nmWxPebiResultAnimationSettingsDlg.h | 9 +++- .../nmPebiResultPlaybackController.cpp | 7 ++- .../nmWxPebiResultAnimationSettingsDlg.cpp | 51 ++++++++++++++++-- 6 files changed, 58 insertions(+), 14 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 75bee651221dd54496007e9e06375d4ac20d2752..08e3a20fee0707fa74794fef0d0011ee578a940a 100644 GIT binary patch delta 11760 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 delta 11522 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 Kx+nyH-~R!7Y0WYK diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index 513cea33..07006ac0 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -2836,7 +2836,7 @@ Reason: %1 Result playback is unavailable.结果回放不可用。 The selected result property is unavailable.所选结果属性不可用。 The selected result frame is unavailable.所选结果帧不可用。 - Playback speed must be between 1 and 60 steps per second.回放速度必须介于每秒 1 到 60 步之间。 + Playback speed must be a positive integer.播放速度必须为正整数。 nmWxPebiResultControlBar diff --git a/Include/nmNum/nmSubWxs/nmPebiResultPlaybackController.h b/Include/nmNum/nmSubWxs/nmPebiResultPlaybackController.h index 771a4552..09f2f25c 100644 --- a/Include/nmNum/nmSubWxs/nmPebiResultPlaybackController.h +++ b/Include/nmNum/nmSubWxs/nmPebiResultPlaybackController.h @@ -22,11 +22,10 @@ class NM_SUB_WXS_EXPORT nmPebiResultPlaybackController : public QObject Q_OBJECT public: - /** @brief 回放速度的合法下限、上限和窗口默认值,单位均为步/秒。 */ + /** @brief 回放速度的合法下限和窗口默认值,单位均为步/秒。 */ enum { MinimumPlaybackSpeed = 1, - MaximumPlaybackSpeed = 60, DefaultPlaybackSpeed = 5 }; diff --git a/Include/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.h b/Include/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.h index 7409e9aa..6888c76b 100644 --- a/Include/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.h +++ b/Include/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.h @@ -6,6 +6,7 @@ #include class QCheckBox; +class QShowEvent; class QSpinBox; /** @@ -22,7 +23,7 @@ class NM_SUB_WXS_EXPORT nmWxPebiResultAnimationSettingsDlg public: /** * @brief 使用当前窗口偏好初始化临时编辑值。 - * @param nStepsPerSecond 初始速度,防御性限制到 1~60 步/秒。 + * @param nStepsPerSecond 初始速度,防御性限制为正整数步/秒。 * @param bLoopEnabled 初始循环开关。 * @param pParent 所属窗口,用于 Qt 对象树和模态定位。 */ @@ -38,10 +39,14 @@ public: /** @brief 返回尚未提交的循环播放选择。 */ bool isLoopEnabled() const; +protected: + /** @brief 显示后聚焦并延迟全选当前速度,便于直接覆盖输入。 */ + virtual void showEvent(QShowEvent* pEvent); + private: Q_DISABLE_COPY(nmWxPebiResultAnimationSettingsDlg) - /** @brief 限制在 1~60 步/秒的速度输入框。 */ + /** @brief 限制为正整数步/秒的速度输入框。 */ QSpinBox* m_pSpeedSpin; /** @brief 是否在末帧之后回到第 0 帧。 */ QCheckBox* m_pLoopCheck; diff --git a/Src/nmNum/nmSubWxs/nmPebiResultPlaybackController.cpp b/Src/nmNum/nmSubWxs/nmPebiResultPlaybackController.cpp index 427bbb35..9365579d 100644 --- a/Src/nmNum/nmSubWxs/nmPebiResultPlaybackController.cpp +++ b/Src/nmNum/nmSubWxs/nmPebiResultPlaybackController.cpp @@ -20,7 +20,7 @@ static const char* const s_pPlaybackTranslationMarkers[] = QT_TRANSLATE_NOOP("nmPebiResultPlaybackController", "The selected result frame is unavailable."), QT_TRANSLATE_NOOP("nmPebiResultPlaybackController", - "Playback speed must be between 1 and 60 steps per second.") + "Playback speed must be a positive integer.") }; QString playbackText(const char* pText) @@ -244,11 +244,10 @@ bool nmPebiResultPlaybackController::setPlaybackSettings( int nStepsPerSecond, bool bLoopEnabled) { - if(nStepsPerSecond < MinimumPlaybackSpeed || - nStepsPerSecond > MaximumPlaybackSpeed) { + if(nStepsPerSecond < MinimumPlaybackSpeed) { // 公开接口不能依赖设置对话框兜底;非法参数也执行统一失败收尾。 return finishFailedOperation(playbackText( - "Playback speed must be between 1 and 60 steps per second.")); + "Playback speed must be a positive integer.")); } if(m_nStepsPerSecond == nStepsPerSecond && m_bLoopEnabled == bLoopEnabled) { diff --git a/Src/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.cpp b/Src/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.cpp index 222ec490..47b55c38 100644 --- a/Src/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPebiResultAnimationSettingsDlg.cpp @@ -3,12 +3,32 @@ #include "nmPebiResultPlaybackController.h" #include +#include #include #include +#include +#include +#include +#include +#include #include +#include #include #include +#include + +namespace { + +QString resultAnimationIconPath(const QString& sFileName) +{ + const QString sApplicationDir = QCoreApplication::applicationDirPath(); + return sApplicationDir.section('/', 0, -2) + + "/Res/Icon/" + sFileName; +} + +} + nmWxPebiResultAnimationSettingsDlg:: nmWxPebiResultAnimationSettingsDlg( int nStepsPerSecond, @@ -19,17 +39,16 @@ nmWxPebiResultAnimationSettingsDlg( m_pLoopCheck(new QCheckBox(tr("Loop enabled"), this)) { setWindowTitle(tr("Animation settings")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setModal(true); m_pSpeedSpin->setRange( nmPebiResultPlaybackController::MinimumPlaybackSpeed, - nmPebiResultPlaybackController::MaximumPlaybackSpeed); - m_pSpeedSpin->setValue(qBound( + INT_MAX); + m_pSpeedSpin->setValue(qMax( static_cast( nmPebiResultPlaybackController::MinimumPlaybackSpeed), - nStepsPerSecond, - static_cast( - nmPebiResultPlaybackController::MaximumPlaybackSpeed))); + nStepsPerSecond)); m_pLoopCheck->setChecked(bLoopEnabled); QFormLayout* pFormLayout = new QFormLayout(); @@ -39,6 +58,21 @@ nmWxPebiResultAnimationSettingsDlg( QDialogButtonBox* pButtonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); + QPushButton* pOkButton = pButtonBox->button(QDialogButtonBox::Ok); + QPushButton* pCancelButton = + pButtonBox->button(QDialogButtonBox::Cancel); + const QSize oButtonIconSize(16, 16); + pOkButton->setIcon(QIcon(resultAnimationIconPath( + QString::fromLatin1("OK.png")))); + pCancelButton->setIcon(QIcon(resultAnimationIconPath( + QString::fromLatin1("Cancel.png")))); + pOkButton->setIconSize(oButtonIconSize); + pCancelButton->setIconSize(oButtonIconSize); + pOkButton->setMinimumWidth(72); + pCancelButton->setMinimumWidth(72); + if(pButtonBox->layout() != nullptr) { + pButtonBox->layout()->setSpacing(6); + } connect(pButtonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(pButtonBox, SIGNAL(rejected()), this, SLOT(reject())); @@ -62,3 +96,10 @@ bool nmWxPebiResultAnimationSettingsDlg::isLoopEnabled() const { return m_pLoopCheck->isChecked(); } + +void nmWxPebiResultAnimationSettingsDlg::showEvent(QShowEvent* pEvent) +{ + QDialog::showEvent(pEvent); + m_pSpeedSpin->setFocus(Qt::OtherFocusReason); + QTimer::singleShot(0, m_pSpeedSpin, SLOT(selectAll())); +}