#ifndef SARIBBONWIDGET_H #define SARIBBONWIDGET_H #include "SARibbonGlobal.h" #include class SARibbonBar; class QScreen; /** * @brief 带SARibbonBar的Widget * * @note 注意,SARibbonWidget利用了布局来把ribbonbar放到最顶部,不要给此widget添加布局,否则会导致布局异常, * 正确的做法是把布局的窗口通过setWidget设置进SARibbonWidget * */ class SA_RIBBON_EXPORT SARibbonWidget : public QWidget { Q_OBJECT SA_RIBBON_DECLARE_PRIVATE(SARibbonWidget) friend class SARibbonBar; Q_PROPERTY(SARibbonTheme ribbonTheme READ ribbonTheme WRITE setRibbonTheme) public: SARibbonWidget(QWidget* parent = nullptr); ~SARibbonWidget() Q_DECL_OVERRIDE; // 返回SARibbonBar SARibbonBar* ribbonBar() const; // 设置ribbonbar void setRibbonBar(SARibbonBar* bar); // 注意主题在构造函数设置主题会不完全生效,使用QTimer投放到队列最后执行即可 // QTimer::singleShot(0, this, [ this ]() { this->setRibbonTheme(SARibbonTheme::RibbonThemeDark); }); void setRibbonTheme(SARibbonTheme theme); SARibbonTheme ribbonTheme() const; // 判断当前是否使用ribbon模式 bool isUseRibbon() const; // 设置窗口 void setWidget(QWidget* w); QWidget* widget() const; // QWidget* takeWidget(); private Q_SLOTS: void onPrimaryScreenChanged(QScreen* screen); }; #endif // SARIBBONWIDGET_H