framelessbase.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef FRAMELESSBASE_H
  2. #define FRAMELESSBASE_H
  3. #include <QWidget>
  4. #include <QMainWindow>
  5. #include <QMenuBar>
  6. #include <QMessageBox>
  7. #include <QDialog>
  8. class QVBoxLayout;
  9. class QEventLoop;
  10. class QCloseEvent;
  11. namespace QWK {
  12. class WidgetWindowAgent;
  13. class StyleAgent;
  14. } // namespace QWK
  15. class TMainWindow : public QMainWindow
  16. {
  17. Q_OBJECT
  18. public:
  19. explicit TMainWindow(QWidget *parent = nullptr);
  20. ~TMainWindow() override {}
  21. protected:
  22. bool event(QEvent *event) override;
  23. private:
  24. void installWindowAgent();
  25. QWK::WidgetWindowAgent *windowAgent;
  26. };
  27. class TWidget : public QWidget
  28. {
  29. Q_OBJECT
  30. public:
  31. explicit TWidget(QWidget *parent = nullptr);
  32. QWidget *menuWidget() const;
  33. void setMenuWidget(QWidget *widget);
  34. QVBoxLayout *mainLayout() const { return m_mainLayout; }
  35. protected:
  36. bool event(QEvent *event) override;
  37. void installWindowAgent();
  38. protected:
  39. QWK::WidgetWindowAgent *windowAgent = nullptr;
  40. QWidget *m_menuWidget = nullptr;
  41. QVBoxLayout *m_mainLayout = nullptr;
  42. };
  43. // 轻量对话框基类:继承 QDialog,并复用与 TWidget 一致的无边框窗口代理/标题栏能力
  44. class TDialog : public QDialog
  45. {
  46. Q_OBJECT
  47. public:
  48. enum DialogCode { Rejected = QDialog::Rejected, Accepted = QDialog::Accepted };
  49. explicit TDialog(QWidget *parent = nullptr);
  50. ~TDialog() override = default;
  51. QWidget *menuWidget() const;
  52. void setMenuWidget(QWidget *widget);
  53. QVBoxLayout *mainLayout() const { return m_mainLayout; }
  54. public slots:
  55. void accept() override; // 包装到 QDialog::accept()
  56. void reject() override; // 包装到 QDialog::reject()
  57. protected:
  58. bool event(QEvent *event) override;
  59. void installWindowAgent();
  60. private:
  61. QWK::WidgetWindowAgent *windowAgent = nullptr;
  62. QWidget *m_menuWidget = nullptr;
  63. QVBoxLayout *m_mainLayout = nullptr;
  64. };
  65. #endif // FRAMELESSBASE_H