From c5c29bd6cd6cdd9f367e121e2d3c43dcc09bce9f Mon Sep 17 00:00:00 2001 From: Ysm-04 Date: Thu, 28 May 2026 11:08:58 +0800 Subject: [PATCH] Add state test menu --- src/ui/PetWindow.cpp | 33 +++++++++++++++++++++++++++++++++ src/ui/PetWindow.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/src/ui/PetWindow.cpp b/src/ui/PetWindow.cpp index 66b38b0..2f872a3 100644 --- a/src/ui/PetWindow.cpp +++ b/src/ui/PetWindow.cpp @@ -59,6 +59,8 @@ void PetWindow::contextMenuEvent(QContextMenuEvent *event) topAction->setCheckable(true); topAction->setChecked(m_alwaysOnTop); + addStateTestActions(&menu); + menu.addSeparator(); QAction *exitAction = menu.addAction(QStringLiteral("退出")); @@ -71,6 +73,10 @@ void PetWindow::contextMenuEvent(QContextMenuEvent *event) { close(); } + else if (selectedAction != nullptr && selectedAction->data().isValid()) + { + playState(selectedAction->data().toString(), false); + } } void PetWindow::mouseMoveEvent(QMouseEvent *event) @@ -125,6 +131,33 @@ void PetWindow::loadInitialImage() setDisplayImage(previewImagePath(), true); } +void PetWindow::addStateTestActions(QMenu *menu) +{ + QMenu *stateMenu = menu->addMenu(QStringLiteral("State Test")); + const QStringList stateNames = { + QStringLiteral("idle"), + QStringLiteral("talk"), + QStringLiteral("think"), + QStringLiteral("sleep"), + QStringLiteral("happy"), + QStringLiteral("error"), + QStringLiteral("drag"), + }; + + for (const QString &stateName : stateNames) + { + if (!m_characterPackage.hasState(stateName)) + { + continue; + } + + QAction *stateAction = stateMenu->addAction(stateName); + stateAction->setData(stateName); + } + + stateMenu->setEnabled(!stateMenu->actions().isEmpty()); +} + void PetWindow::playState(const QString &stateName, bool centerWindow) { if (m_currentStateName == stateName && !m_currentFrames.isEmpty()) diff --git a/src/ui/PetWindow.h b/src/ui/PetWindow.h index dad4bf6..d5f6c3b 100644 --- a/src/ui/PetWindow.h +++ b/src/ui/PetWindow.h @@ -8,6 +8,8 @@ #include #include +class QMenu; + class PetWindow : public QWidget { public: @@ -21,6 +23,7 @@ protected: private: void loadInitialImage(); + void addStateTestActions(QMenu *menu); void playState(const QString &stateName, bool centerWindow); void advanceStateFrame(); void setDisplayImage(const QString &imagePath, bool centerWindow);