SARibbon 2.5.2
SARibbon wiki
载入中...
搜索中...
未找到
SARibbonMainWindow.h
1#ifndef SARIBBONMAINWINDOW_H
2#define SARIBBONMAINWINDOW_H
3#include "SARibbonGlobal.h"
4#include <QMainWindow>
5
6#if !SARIBBON_USE_3RDPARTY_FRAMELESSHELPER
8#endif
9class QAction;
10class SARibbonBar;
12class QScreen;
59class SA_RIBBON_EXPORT SARibbonMainWindow : public QMainWindow
60{
61 Q_OBJECT
62 SA_RIBBON_DECLARE_PRIVATE(SARibbonMainWindow)
63 friend class SARibbonBar;
64 Q_PROPERTY(SARibbonTheme ribbonTheme READ ribbonTheme WRITE setRibbonTheme)
65
66public:
67 explicit SARibbonMainWindow(QWidget* parent = nullptr,
68 SARibbonMainWindowStyles style = SARibbonMainWindowStyleFlag::UseRibbonMenuBar
69 | SARibbonMainWindowStyleFlag::UseRibbonFrame,
70 const Qt::WindowFlags flags = Qt::WindowFlags());
71 ~SARibbonMainWindow() override;
72 // 返回SARibbonBar
73 SARibbonBar* ribbonBar() const;
74 // 设置ribbonbar
75 void setRibbonBar(SARibbonBar* ribbon);
76#if !SARIBBON_USE_3RDPARTY_FRAMELESSHELPER
77 // 返回SAFramelessHelper
78 SAFramelessHelper* framelessHelper() const;
79 // 设置缩放时,使用橡皮筋示意而不是立即缩放,这对于大渲染量的软件(如CAD、三维)比较友好
80 void setRubberBandOnResize(bool on);
81 bool isRubberBandOnResize() const;
82#else
83 // 如果ribbon中有自定义的窗口在标题栏等非点击区域加入后,想能点击,需要调用此接口告知可点击
84 void setFramelessHitTestVisible(QWidget* w, bool visible = true);
85#endif
86 // 此函数仅用于控制最小最大化和关闭按钮的显示
87 void updateWindowFlag(Qt::WindowFlags flags);
88 // 注意主题在构造函数设置主题会不完全生效,使用QTimer投放到队列最后执行即可
89 // QTimer::singleShot(0, this, [ this ]() { this->setRibbonTheme(SARibbonMainWindow::RibbonThemeDark); });
90 void setRibbonTheme(SARibbonTheme theme);
91 SARibbonTheme ribbonTheme() const;
92 // 判断当前是否使用ribbon模式
93 bool isUseRibbon() const;
94 // 获取最大化,最小化,关闭按钮所在的bar。可以通过此函数在最大最小化按钮旁边设置内容
95 SARibbonSystemButtonBar* windowButtonBar() const;
96 // 获取当前mainwidow的样式
97 SARibbonMainWindowStyles ribbonMainwindowStyle() const;
98
99 // 把ribbonbar的事件传递到frameless
100 virtual bool eventFilter(QObject* obj, QEvent* e) Q_DECL_OVERRIDE;
101
102protected:
103 // 创建ribbonbar的工厂函数
104 SARibbonBar* createRibbonBar();
105private Q_SLOTS:
106 void onPrimaryScreenChanged(QScreen* screen);
107};
108
112class SA_RIBBON_EXPORT SARibbonMainWindowEventFilter : public QObject
113{
114 Q_OBJECT
115public:
116 explicit SARibbonMainWindowEventFilter(QObject* par);
118 virtual bool eventFilter(QObject* obj, QEvent* e) override;
119};
120
121#endif // SARIBBONMAINWINDOW_H
该类用于帮助实现无边框窗体的移动和缩放功能。
Definition SAFramelessHelper.h:26
SARibbonBar继承于QMenuBar,在SARibbonMainWindow中直接替换了原来的QMenuBar
Definition SARibbonBar.h:94
针对SARibbonMainWindow的事件处理器,主要处理systembar的位置调整
Definition SARibbonMainWindow.h:113
如果要使用SARibbonBar,必须使用此类代替QMainWindow
Definition SARibbonMainWindow.h:60
窗口的最大最小化按钮
Definition SARibbonSystemButtonBar.h:27