QsMenu.h 878 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <QtWidgets/qwidget.h>
  3. #include <string>
  4. #include <Kaguya/kaguya.hpp>
  5. #include "QsElement.h"
  6. #include "QsWidget.h"
  7. #include <QtWidgets/qmenu.h>
  8. #include "QsIcon.h"
  9. class QsAction
  10. {
  11. public:
  12. QsAction();
  13. ~QsAction();
  14. static void regist(kaguya::State& T);
  15. QAction* action() { return m_action; }
  16. void onTriggered(kaguya::LuaFunction callback) { m_onTriggered = callback; };
  17. private:
  18. void setText(const std::string& text);
  19. void setIcon(QsIcon icon);
  20. private:
  21. QAction* m_action = nullptr;
  22. kaguya::LuaFunction m_onTriggered;
  23. };
  24. class QsMenu :public QsElement
  25. {
  26. public:
  27. QsMenu(QsWidget* parent = nullptr);
  28. ~QsMenu();
  29. static void regist(kaguya::State& T);
  30. private:
  31. void addAction(QsAction* action);
  32. void exec();
  33. // 通过 QsElement 继承
  34. virtual QsWidget* toQ() override{ return appQs(new QsWidget(m_menu)); }
  35. private:
  36. QMenu* m_menu = nullptr;
  37. };