diff --git a/src/SARibbonBar/SARibbonMainWindow.cpp b/src/SARibbonBar/SARibbonMainWindow.cpp index 6015c6d..1a45af8 100644 --- a/src/SARibbonBar/SARibbonMainWindow.cpp +++ b/src/SARibbonBar/SARibbonMainWindow.cpp @@ -84,7 +84,13 @@ SARibbonBar* SARibbonMainWindow::ribbonBar() const return qobject_cast< SARibbonBar* >(menuWidget()); } -#if !SARIBBON_USE_3RDPARTY_FRAMELESSHELPER +#if SARIBBON_USE_3RDPARTY_FRAMELESSHELPER +FRAMELESSHELPER_PREPEND_NAMESPACE(FramelessWidgetsHelper*) SARibbonMainWindow::framelessHelper() +{ + return FramelessWidgetsHelper::get(this); +} +#else + SAFramelessHelper* SARibbonMainWindow::framelessHelper() { return (d_ptr->mFramelessHelper); @@ -110,11 +116,6 @@ bool SARibbonMainWindow::eventFilter(QObject* obj, QEvent* e) } return (QMainWindow::eventFilter(obj, e)); } -#else -FRAMELESSHELPER_PREPEND_NAMESPACE(FramelessWidgetsHelper*) SARibbonMainWindow::framelessHelper() -{ - return FramelessWidgetsHelper::get(this); -} #endif /** * @brief 此函数仅用于控制最小最大化和关闭按钮的显示 @@ -317,7 +318,9 @@ void SARibbonMainWindow::setupNormalWindow() d_ptr->mWindowButtonGroup = new SAWindowButtonGroup(this); } d_ptr->mWindowButtonGroup->setWindowStates(windowState()); + d_ptr->mWindowButtonGroup->resize(60, 30); d_ptr->mWindowButtonGroup->show(); + d_ptr->mWindowButtonGroup->raise(); #endif } @@ -348,6 +351,6 @@ void sa_set_ribbon_theme(QWidget* w, SARibbonMainWindow::RibbonTheme theme) return; } // 有反馈用qstring接住文件内容,再设置进去才能生效(qt5.7版本) - QString qss = file.readAll(); + QString qss = QString::fromUtf8(file.readAll()); w->setStyleSheet(qss); } diff --git a/src/example/NormalMenuBarExample/MainWindow.cpp b/src/example/NormalMenuBarExample/MainWindow.cpp index b93350d..410404a 100644 --- a/src/example/NormalMenuBarExample/MainWindow.cpp +++ b/src/example/NormalMenuBarExample/MainWindow.cpp @@ -1,12 +1,23 @@ #include "MainWindow.h" #include "ui_MainWindow.h" - +#if SARIBBON_USE_3RDPARTY_FRAMELESSHELPER +#include "FramelessHelper/Widgets/standardsystembutton.h" +#include "FramelessHelper/Widgets/framelesswidgetshelper.h" +FRAMELESSHELPER_USE_NAMESPACE +using namespace Global; +#endif MainWindow::MainWindow(QWidget* parent) : SARibbonMainWindow(parent, false) { if (!isUseRibbon()) { ui = new Ui::MainWindow; ui->setupUi(this); } +#if SARIBBON_USE_3RDPARTY_FRAMELESSHELPER + if (QWidget* w = menuWidget()) { + auto fh = framelessHelper(); + fh->setHitTestVisible(w); + } +#endif } MainWindow::~MainWindow() diff --git a/src/example/WidgetWithRibbon/Widget.cpp b/src/example/WidgetWithRibbon/Widget.cpp index 64b353a..c857073 100644 --- a/src/example/WidgetWithRibbon/Widget.cpp +++ b/src/example/WidgetWithRibbon/Widget.cpp @@ -17,12 +17,12 @@ Widget::Widget(QWidget* parent) : QWidget(parent), ui(new Ui::Widget) mRibbonBar->setRibbonStyle(SARibbonBar::RibbonStyleCompactThreeRow); // 取消applicationbutton mRibbonBar->setApplicationButton(nullptr); - //设置主题,这里虽然没用到SARibbonMainWindow,但Ribbon的主题是SARibbonMainWindow中定义的,因此要引入SARibbonMainWindow.h + // 设置主题,这里虽然没用到SARibbonMainWindow,但Ribbon的主题是SARibbonMainWindow中定义的,因此要引入SARibbonMainWindow.h sa_set_ribbon_theme(mRibbonBar, SARibbonMainWindow::RibbonThemeOffice2013); - // QWidgets设置一个QVBoxLayout,把窗口放到QVBoxLayout的第二个布局中,第一个布局给SARibbonBar - // 这样,SARibbonBar就会在最上面 - ui->verticalLayout->insertWidget(0, mRibbonBar); + // QLayout有专门的setMenuBar接口,针对menubar的布局,不需要插入到verticalLayout的0位置也可以实现 + // ui->verticalLayout->insertWidget(0, mRibbonBar); + ui->verticalLayout->setMenuBar(mRibbonBar); buildRibbon(mRibbonBar); }