diff --git a/CMakeLists.txt b/CMakeLists.txt index d6f9ca7..858cccd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.5) set(SARIBBON_VERSION_MAJOR 2) set(SARIBBON_VERSION_MINOR 2) -set(SARIBBON_VERSION_PATCH 8) +set(SARIBBON_VERSION_PATCH 9) set(SARIBBON_VERSION "${SARIBBON_VERSION_MAJOR}.${SARIBBON_VERSION_MINOR}.${SARIBBON_VERSION_PATCH}") message(STATUS "SARibbon v${SARIBBON_VERSION}") project(SARibbon VERSION ${SARIBBON_VERSION} LANGUAGES CXX) diff --git a/changlog.md b/changlog.md index ce18877..0779116 100644 --- a/changlog.md +++ b/changlog.md @@ -1,10 +1,19 @@ # 版本记录(change log): +## 2025-02-05 -> 2.2.9 + +- `SARibbonBar`增加`setWindowTitleBackgroundBrush`/`windowTitleBackgroundBrush`函数,允许用户设置标题栏的背景色 + +![](./doc/screenshot/SARibbonBar-setWindowTitleBackgroundBrush.png) + +- 修正了`SARibbonBar`针对标题的渲染方式,能根据父窗口的`isWindowModified`状态,针对`[*]`占位符进行渲染 +- 例子中增加了标题栏背景颜色周期改变的示例 + ## 2025-01-04 -> 2.2.8 [hotfix] - 修正合并文件会存在宏重复定义问题-2.2.7遗漏了一个调试宏 -- SARibbonSeparatorWidget的宽度增加了最小1像素的判断 -- SARibbonToolButton添加了textEllipsisAspectFactor相关接口,用户可以通过设置文字省略显示的长宽比,来调整按钮的最宽宽度 +- `SARibbonSeparatorWidget`的宽度增加了最小1像素的判断 +- `SARibbonToolButton`添加了`textEllipsisAspectFactor`相关函数,用户可以通过设置文字省略显示的长宽比,来调整按钮的最宽宽度 - 优化了一些cmake的内容 ## 2024-12-23 -> 2.2.7 [hotfix] @@ -20,54 +29,54 @@ ## 2024-10-17 -> 2.2.5 -- 原有的qt关键宏替换为Q_SIGNAL\Q_SLOT\Q_EMIT,以适应no_keywords设置 +- 原有的qt关键宏替换为`Q_SIGNAL` / `Q_SLOT` / `Q_EMIT`,以适应no_keywords设置 - 调整目录结构,单独把example提取出来 - 完善mdi窗口的例子,可以结合qwk实现mdi窗口的最大最小化按钮的显示 ## 2024-09-12 -> 2.2.4 -- 修正自定义过程调用setRibbonBar后,会导致最大最小化按钮被遮挡的问题 +- 修正自定义`SARibbonMainWindow`调用`setRibbonBar`后,会导致最大最小化按钮被遮挡的问题 - 调整Mdi例子中cmake的文件大小写,避免在linux系统下大小写敏感 -- 修正qwk开启后,eventfilter没有捕获的问题 +- 修正qwk开启后,`SARibbonMainWindow::eventfilter`没有捕获的问题 ## 2024-07-25 -> 2.2.1 -- 增加setPannelSpacing接口,可调节pannel按钮的间距 -- SARibbonToolButton的icon尺寸可设置,在小按钮模式下,用户可指定icon尺寸 -- 把SARibbonMainWindow的事件处理通过eventfilter实现,避免用户在重写事件时误操作 -- 修正SARibbonGalleryButton的样式错误 +- 增加`setPannelSpacing`接口,可调节pannel按钮的间距 +- `SARibbonToolButton`的icon尺寸可设置,在小按钮模式下,用户可指定icon尺寸 +- 把`SARibbonMainWindow`的事件处理通过`eventfilter`实现,避免用户在重写事件时误操作 +- 修正`SARibbonGalleryButton`的样式错误 - 修正SystemBar在qwk下会位置有偏离的问题 ## 2024-07-15 -> 2.2.0 - 增加了mdi窗口的示例 -- 增加了SARibbonTabBar的tab尺寸计算方式,可以让tab高度按照tabbar高度自动调整 +- 增加了`SARibbonTabBar`的tab尺寸计算方式,可以让tab高度按照tabbar高度自动调整 - 示例增加了尺寸设置的配置,可以任意调整titlebar,tabbar,pannel title height的高度 - 修正调整category高度后,pannel高度不跟着改变的问题 - 添加snap layout的开关,在依赖qwk下,可以设置是否开启snap layout ## 2024-05-23 -> 2.1.0 -- 添加actionTriggered信号 +- 添加`actionTriggered`信号 - 修正了滚动action显示效果 -- 把SARibbonTheme从SARibbonMainWindow中转移到SARibbonGloabls.h中并作为枚举类(enum class) -- 添加SARibbonWidget,同时调整example/widget示例 +- 把`SARibbonTheme`从SARibbonMainWindow中转移到`SARibbonGloabls.h`中并作为枚举类(enum class) +- 添加`SARibbonWidget`,同时调整example/widget示例 - 调整了布局移动的实现方式,不会出现压缩式移动 ## 2024-02-07 -> 2.0.3 -- 调整SAColorToolButton的实现,使之更简单 +- 调整`SAColorToolButton`的实现,使之更简单 - 修正qwk库引入的cmake - 调整文档 ## 2024-02-07 -> 2.0.2 -- 修正SARibbonSystemButtonBar的编码问题,可能会导致vs下无法编译成功 -- SARibbonContextCategory的标签颜色调整 +- 修正`SARibbonSystemButtonBar`的编码问题,可能会导致vs下无法编译成功 +- `SARibbonContextCategory`的标签颜色调整 ## 2024-01-27 -> 2.0.1【失效,请使用v2.0.2及以上版本】 -- 调整qss,让SARibbonApplicationButton的下拉箭头不显示 +- 调整qss,让`SARibbonApplicationButton`的下拉箭头不显示 - 文档添加gallery - 修正了一个布局可能异常的点 @@ -101,20 +110,20 @@ ## 2023-12-29 -> 1.1.2 - 合并了lixinchang的修改(https://gitee.com/lixinchang) -- 添加了SARibbonControlToolButton,ControlBar不再使用QToolButton,避免和QToolButton的qss冲突 +- 添加了`SARibbonControlToolButton`,ControlBar不再使用QToolButton,避免和QToolButton的qss冲突 - ControlBar支持按钮菜单样式的指定 - 调整了默认样式的内容 ## 2023-12-25 -> 1.1.1 -- 修正了SARibbonBar的布局过程对窗体隐藏的判断方式,使得在窗口没显示时也能正确布局 +- 修正了`SARibbonBar`的布局过程对窗体隐藏的判断方式,使得在窗口没显示时也能正确布局 ## 2023-12-25 -> 1.1.0 - 修正了尺寸刷新的问题,在首次显示不会出现控件跳动的状态 - 修正了一些问题 - 调整了创建RibbonButton的方式 -- 调整了SARibbonPannel一些接口,使得创建更加规范 +- 调整了`SARibbonPannel`一些接口,使得创建更加规范 - 调整了ToolButton的渲染方式 ------------------------ @@ -189,16 +198,16 @@ en(machine translation): ## 2023-05-28 -> 0.5.0 -- 调整了大按钮模式下的显示方案,去除了原来SARibbonToolButton的Lite和Normal模式,以WordWrap来表征 +- 调整了大按钮模式下的显示方案,去除了原来`SARibbonToolButton`的Lite和Normal模式,以WordWrap来表征 - 支持文字自定义换行 - 调整了RibbonPannel的标题栏的高度计算方案 ## 0.5.1 -- 不使用QString::simplified,而是简单的仅仅替换\n的simplified,这样中文换行不会多出空格 +- 不使用`QString::simplified`,而是简单的仅仅替换\n的simplified,这样中文换行不会多出空格 ## 0.5.2 -- SARibbonColorToolButton\SARibbonToolButton修正&操作在三项表达式未加括号问题 -- SARibbonStyleOption添加虚析构函数 -- 原来SARibbonElementCreateDelegate类改名为SARibbonElementFactory \ No newline at end of file +- `SARibbonColorToolButton` / `SARibbonToolButton`修正&操作在三项表达式未加括号问题 +- `SARibbonStyleOption`添加虚析构函数 +- 原来`SARibbonElementCreateDelegate`类改名为`SARibbonElementFactory` \ No newline at end of file diff --git a/doc/screenshot/SARibbonBar-setWindowTitleBackgroundBrush.png b/doc/screenshot/SARibbonBar-setWindowTitleBackgroundBrush.png new file mode 100644 index 0000000..8b88b97 Binary files /dev/null and b/doc/screenshot/SARibbonBar-setWindowTitleBackgroundBrush.png differ diff --git a/example/MainWindowExample/mainwindow.cpp b/example/MainWindowExample/mainwindow.cpp index 8d2bd79..fecf8ca 100644 --- a/example/MainWindowExample/mainwindow.cpp +++ b/example/MainWindowExample/mainwindow.cpp @@ -63,7 +63,8 @@ MainWindow::MainWindow(QWidget* par) { PRINT_COST_START(); - setWindowTitle(("ribbon mainwindow test")); + setWindowTitle(("ribbon mainwindow test[*]")); + setWindowModified(true); mTextedit = new QTextEdit(this); setCentralWidget(mTextedit); setStatusBar(new QStatusBar()); @@ -171,7 +172,11 @@ MainWindow::MainWindow(QWidget* par) connect(ribbon, &SARibbonBar::currentRibbonTabChanged, this, [ this ](int v) { mTextedit->append(QString("SARibbonBar::currentRibbonTabChanged(%1)").arg(v)); }); + //! 这个定时器10秒触发一次,用于改变标题颜色 + connect(&mChangeTitleBkColorTimer, &QTimer::timeout, this, &MainWindow::onTitleBackgroundBrushChangedTimeout); + mChangeTitleBkColorTimer.start(10000); + //! 全屏显示 showMaximized(); } @@ -669,6 +674,23 @@ void MainWindow::onSpinBoxRibbonPannelToolBtnIconSizeChanged(int h) ribbonBar()->setPannelToolButtonIconSize(QSize(h, h)); } +/** + * @brief 此函数用来演示标题栏颜色改变 + */ +void MainWindow::onTitleBackgroundBrushChangedTimeout() +{ + static bool s_setNoBrush = true; + s_setNoBrush = (!s_setNoBrush); + if (s_setNoBrush) { + ribbonBar()->setWindowTitleTextColor(Qt::black); + ribbonBar()->setWindowTitleBackgroundBrush(Qt::NoBrush); + } else { + ribbonBar()->setWindowTitleTextColor(Qt::white); + ribbonBar()->setWindowTitleBackgroundBrush(Qt::red); + } + ribbonBar()->repaint(); +} + /** * @brief 创建其它actions,这些actions并不在SARibbonBar管理 */ @@ -702,16 +724,19 @@ void MainWindow::createCategoryMain(SARibbonCategory* page) SARibbonPannel* pannelStyle = page->addPannel(("ribbon style")); QAction* actSave = createAction(tr("Save"), ":/icon/icon/save.svg"); + connect(actSave, &QAction::triggered, this, [ this ](bool b) { + Q_UNUSED(b); + this->mTextedit->append("actSaveion clicked"); + this->setWindowModified(false); + // 更新状态后,需要手动调用ribbonbar刷新重绘标题,目前ribbonbar不会自动检测WindowModified状态 + this->ribbonBar()->repaint(); + }); // 这样设置快捷键 QShortcut* shortCut = new QShortcut(QKeySequence(QLatin1String("Ctrl+S")), this); connect(shortCut, &QShortcut::activated, this, [ actSave ]() { actSave->trigger(); }); - // 这样设置是无效的 + // 这样设置如果切换到其它标签,快捷键是不生效的 // actSave->setShortcut(QKeySequence(QLatin1String("Ctrl+S"))); - connect(actSave, &QAction::triggered, this, [ this ](bool b) { - Q_UNUSED(b); - this->mTextedit->append("actSaveion clicked"); - }); pannelStyle->addLargeAction(actSave); QAction* actHideRibbon = createAction(tr("hide ribbon"), ":/icon/icon/hideRibbon.svg", "actHideRibbon"); diff --git a/example/MainWindowExample/mainwindow.h b/example/MainWindowExample/mainwindow.h index e5f9b19..57711a6 100644 --- a/example/MainWindowExample/mainwindow.h +++ b/example/MainWindowExample/mainwindow.h @@ -1,6 +1,7 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "SARibbonMainWindow.h" +#include class SARibbonCategory; class SARibbonContextCategory; class SARibbonCustomizeWidget; @@ -75,6 +76,8 @@ private Q_SLOTS: void onSpinBoxRibbonPannelTtitleHeightChanged(int h); void onSpinBoxRibbonPannelSpacingChanged(int h); void onSpinBoxRibbonPannelToolBtnIconSizeChanged(int h); + // 此函数用来演示标题栏颜色改变 + void onTitleBackgroundBrushChangedTimeout(); private: // 创建其它actions,这些actions并不在SARibbonBar管理 @@ -115,7 +118,8 @@ private Q_SLOTS: SARibbonPannel* mPannelVisbileExample { nullptr }; // QAction* mActionVisibleAll { nullptr }; ///< 控制所有action是否可见的开关 - bool mHasApplyCustomizeXmlFile { false }; /// 程序启动后是否应用上次修改 + bool mHasApplyCustomizeXmlFile { false }; ///< 程序启动后是否应用上次修改 + QTimer mChangeTitleBkColorTimer; ///< 用于周期改变标题颜色的一个定时器 }; #endif // MAINWINDOW_H diff --git a/src/SARibbonBar/SARibbonBar.cpp b/src/SARibbonBar/SARibbonBar.cpp index e880eac..979463b 100644 --- a/src/SARibbonBar/SARibbonBar.cpp +++ b/src/SARibbonBar/SARibbonBar.cpp @@ -81,6 +81,7 @@ class SARibbonBar::PrivateData QColor mContextCategoryTitleTextColor { Qt::black }; ///< 记录Context category的标题字体颜色 Qt::Alignment mTitleAligment { Qt::AlignCenter }; ///< 标题对齐方式 bool mIsTitleVisible { true }; ///< 标题是否显示 + QBrush mTitleBackgroundBrush { Qt::NoBrush }; ///< 标题的背景颜色 SARibbonAlignment mRibbonAlignment { SARibbonAlignment::AlignLeft }; ///< 对齐方式 SARibbonPannel::PannelLayoutMode mDefaulePannelLayoutMode { SARibbonPannel::ThreeRowMode }; ///< 默认的PannelLayoutMode bool mEnableShowPannelTitle { true }; ///< 是否运行pannel的标题栏显示 @@ -108,7 +109,8 @@ class SARibbonBar::PrivateData // 根据字体信息计算category的高度 int calcCategoryHeight(); // 计算tabbar高度 - static int calcMainBarHeight(int tabHegith, int titleHeight, int categoryHeight, bool tabOnTitle, SARibbonBar::RibbonMode rMode); + static int + calcMainBarHeight(int tabHegith, int titleHeight, int categoryHeight, bool tabOnTitle, SARibbonBar::RibbonMode rMode); // 获取当前最小模式下的高度 int getCurrentMinimumModeMainBarHeight() const; // 获取当前正常模式下的高度 @@ -185,8 +187,8 @@ int SARibbonBar::PrivateData::systemTabBarHeight() const */ int SARibbonBar::PrivateData::calcTabBarHeight() { - int defaultHeight = systemTabBarHeight(); - int fontHeight = q_ptr->fontMetrics().lineSpacing(); // 不要用height,像宋体这种字体,height=12,lineSpacing=14,有些就无法显示 + int defaultHeight = systemTabBarHeight(); + int fontHeight = q_ptr->fontMetrics().lineSpacing(); // 不要用height,像宋体这种字体,height=12,lineSpacing=14,有些就无法显示 int defaultHeight2 = fontHeight * 1.6; if (defaultHeight2 < fontHeight + 10) { defaultHeight2 = fontHeight + 10; // 主要为了满足office2021主题,tab下有个4px的横杠 @@ -269,7 +271,8 @@ int SARibbonBar::PrivateData::calcMainBarHeight(int tabHegith, int SARibbonBar::PrivateData::getCurrentMinimumModeMainBarHeight() const { - return calcMainBarHeight(tabBarHeigth(), titleBarHeight(), categoryHeight(), mIsTabOnTitle, SARibbonBar::MinimumRibbonMode); + return calcMainBarHeight( + tabBarHeigth(), titleBarHeight(), categoryHeight(), mIsTabOnTitle, SARibbonBar::MinimumRibbonMode); } int SARibbonBar::PrivateData::getCurrentNormalModeMainBarHeight() const @@ -1104,14 +1107,12 @@ void SARibbonBar::showMinimumModeButton(bool isShow) activeRightButtonGroup(); d_ptr->mMinimumCategoryButtonAction = new QAction(this); - d_ptr->mMinimumCategoryButtonAction->setIcon( - style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, - nullptr)); + d_ptr->mMinimumCategoryButtonAction->setIcon(style()->standardIcon( + isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, nullptr)); connect(d_ptr->mMinimumCategoryButtonAction, &QAction::triggered, this, [ this ]() { this->setMinimumMode(!isMinimumMode()); - this->d_ptr->mMinimumCategoryButtonAction->setIcon( - style()->standardIcon(isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, - nullptr)); + this->d_ptr->mMinimumCategoryButtonAction->setIcon(style()->standardIcon( + isMinimumMode() ? QStyle::SP_TitleBarUnshadeButton : QStyle::SP_TitleBarShadeButton, nullptr)); }); d_ptr->mRightButtonGroup->addAction(d_ptr->mMinimumCategoryButtonAction); @@ -1442,6 +1443,29 @@ void SARibbonBar::synchronousCategoryData(bool autoUpdate) } } +/** + * @brief 把窗口标题文字转换为显示的文字,这里主要针对[*]占位符进行替换 + * @param title + * @return 如果存在[*]占位符,则根据父窗口的isWindowModified状态进行文字的替换,isWindowModified为true,[*]替换为*,isWindowModified为false,[*]替换为空 + */ +QString SARibbonBar::toDisplayTitleText(const QString& title) const +{ + if (!title.contains("[*]")) { + return title; + } + QWidget* w = parentWidget(); + if (!w) { + return title; + } + QString res = title; + if (w->isWindowModified()) { + res.replace("[*]", "*"); + } else { + res.replace("[*]", ""); + } + return res; +} + /** @brief 激活tabbar右边的按钮群 @return 返回右边的按钮群指针 @@ -1747,8 +1771,8 @@ bool SARibbonBar::isEnableWordWrap() const */ void SARibbonBar::setButtonTextEllipsisAspectFactor(qreal fac) { - SARibbonToolButton::setTextEllipsisAspectFactor(fac); - updateRibbonGeometry(); + SARibbonToolButton::setTextEllipsisAspectFactor(fac); + updateRibbonGeometry(); } /** @@ -1885,6 +1909,29 @@ bool SARibbonBar::isTitleVisible() const return d_ptr->mIsTitleVisible; } +/** + * @brief 设置标题栏的背景颜色 + * + * 如果不需要颜色,设置Qt::NoBrush + * @param bk 背景颜色 + */ +void SARibbonBar::setWindowTitleBackgroundBrush(const QBrush& bk) +{ + d_ptr->mTitleBackgroundBrush = bk; +} + +/** + * @brief 标题栏的背景颜色 + * + * 颜色为Qt::NoBrush时,代表没有背景颜色 + * @default Qt::NoBrush + * @return + */ +QBrush SARibbonBar::windowTitleBackgroundBrush() const +{ + return d_ptr->mTitleBackgroundBrush; +} + /** @brief 设置上下文标签的颜色列表 @@ -2200,7 +2247,7 @@ void SARibbonBar::paintInLooseStyle() p.drawRect(titleRegion); p.restore(); #endif - paintWindowTitle(p, parWindow->windowTitle(), titleRegion); + paintWindowTitle(p, toDisplayTitleText(parWindow->windowTitle()), titleRegion); } } @@ -2246,7 +2293,7 @@ void SARibbonBar::paintInCompactStyle() p.drawRect(titleRegion); p.restore(); #endif - paintWindowTitle(p, parWindow->windowTitle(), titleRegion); + paintWindowTitle(p, toDisplayTitleText(parWindow->windowTitle()), titleRegion); } } } @@ -2633,9 +2680,19 @@ void SARibbonBar::paintWindowTitle(QPainter& painter, const QString& title, cons return; } painter.save(); + // 先绘制背景 + if (d_ptr->mTitleBackgroundBrush != Qt::NoBrush) { + painter.setPen(Qt::NoPen); + painter.setBrush(d_ptr->mTitleBackgroundBrush); + painter.drawRect(titleRegion); + } + // 再绘制文本 if (d_ptr->mTitleTextColor.isValid()) { painter.setPen(d_ptr->mTitleTextColor); + } else { + painter.setPen(Qt::black); } + painter.drawText(titleRegion, d_ptr->mTitleAligment, title); painter.restore(); } diff --git a/src/SARibbonBar/SARibbonBar.h b/src/SARibbonBar/SARibbonBar.h index 6e7c9c0..b3ecab6 100644 --- a/src/SARibbonBar/SARibbonBar.h +++ b/src/SARibbonBar/SARibbonBar.h @@ -91,371 +91,377 @@ class SARibbonStackedWidget; */ class SA_RIBBON_EXPORT SARibbonBar : public QMenuBar { - Q_OBJECT - SA_RIBBON_DECLARE_PRIVATE(SARibbonBar) - friend class SARibbonMainWindow; - friend class SARibbonSystemButtonBar; - Q_PROPERTY(RibbonStyles ribbonStyle READ currentRibbonStyle WRITE setRibbonStyle) - Q_PROPERTY(bool minimumMode READ isMinimumMode WRITE setMinimumMode) - Q_PROPERTY(bool minimumModeButton READ haveShowMinimumModeButton WRITE showMinimumModeButton) - Q_PROPERTY(QColor windowTitleTextColor READ windowTitleTextColor WRITE setWindowTitleTextColor) - Q_PROPERTY(QColor tabBarBaseLineColor READ tabBarBaseLineColor WRITE setTabBarBaseLineColor) - Q_PROPERTY(Qt::Alignment windowTitleAligment READ windowTitleAligment WRITE setWindowTitleAligment) - Q_PROPERTY(bool enableWordWrap READ isEnableWordWrap WRITE setEnableWordWrap) - Q_PROPERTY(bool enableShowPannelTitle READ isEnableShowPannelTitle WRITE setEnableShowPannelTitle) - Q_PROPERTY(bool tabOnTitle READ isTabOnTitle WRITE setTabOnTitle) - Q_PROPERTY(SARibbonPannel::PannelLayoutMode pannelLayoutMode READ pannelLayoutMode WRITE setPannelLayoutMode) + Q_OBJECT + SA_RIBBON_DECLARE_PRIVATE(SARibbonBar) + friend class SARibbonMainWindow; + friend class SARibbonSystemButtonBar; + Q_PROPERTY(RibbonStyles ribbonStyle READ currentRibbonStyle WRITE setRibbonStyle) + Q_PROPERTY(bool minimumMode READ isMinimumMode WRITE setMinimumMode) + Q_PROPERTY(bool minimumModeButton READ haveShowMinimumModeButton WRITE showMinimumModeButton) + Q_PROPERTY(QColor windowTitleTextColor READ windowTitleTextColor WRITE setWindowTitleTextColor) + Q_PROPERTY(QColor tabBarBaseLineColor READ tabBarBaseLineColor WRITE setTabBarBaseLineColor) + Q_PROPERTY(Qt::Alignment windowTitleAligment READ windowTitleAligment WRITE setWindowTitleAligment) + Q_PROPERTY(bool enableWordWrap READ isEnableWordWrap WRITE setEnableWordWrap) + Q_PROPERTY(bool enableShowPannelTitle READ isEnableShowPannelTitle WRITE setEnableShowPannelTitle) + Q_PROPERTY(bool tabOnTitle READ isTabOnTitle WRITE setTabOnTitle) + Q_PROPERTY(SARibbonPannel::PannelLayoutMode pannelLayoutMode READ pannelLayoutMode WRITE setPannelLayoutMode) public: - enum RibbonStyleFlag - { - RibbonStyleLoose = 0x0001, // bit:0000 0001 - RibbonStyleCompact = 0x0002, // bit:0000 0010 - RibbonStyleThreeRow = 0x0010, // bit:0001 0000 - RibbonStyleTwoRow = 0x0020, // bit:0010 0000 - - RibbonStyleLooseThreeRow = RibbonStyleLoose | RibbonStyleThreeRow, ///< 宽松结构,3行模式 - RibbonStyleCompactThreeRow = RibbonStyleCompact | RibbonStyleThreeRow, ///< 紧凑结构,3行模式 - RibbonStyleLooseTwoRow = RibbonStyleLoose | RibbonStyleTwoRow, ///< 宽松结构,2行模式 - RibbonStyleCompactTwoRow = RibbonStyleCompact | RibbonStyleTwoRow ///< 紧凑结构,2行模式 - }; - Q_ENUM(RibbonStyleFlag) - Q_DECLARE_FLAGS(RibbonStyles, RibbonStyleFlag) - Q_FLAG(RibbonStyles) - - /** - * @brief 定义当前ribbon 的状态 - */ - enum RibbonMode - { - MinimumRibbonMode, ///< 缩小模式 - NormalRibbonMode ///< 正常模式 - }; - Q_ENUM(RibbonMode) - - using FpCategoryIterate = std::function< bool(SARibbonCategory*) >; - using FpPannelIterate = SARibbonCategory::FpPannelIterate; + enum RibbonStyleFlag + { + RibbonStyleLoose = 0x0001, // bit:0000 0001 + RibbonStyleCompact = 0x0002, // bit:0000 0010 + RibbonStyleThreeRow = 0x0010, // bit:0001 0000 + RibbonStyleTwoRow = 0x0020, // bit:0010 0000 + + RibbonStyleLooseThreeRow = RibbonStyleLoose | RibbonStyleThreeRow, ///< 宽松结构,3行模式 + RibbonStyleCompactThreeRow = RibbonStyleCompact | RibbonStyleThreeRow, ///< 紧凑结构,3行模式 + RibbonStyleLooseTwoRow = RibbonStyleLoose | RibbonStyleTwoRow, ///< 宽松结构,2行模式 + RibbonStyleCompactTwoRow = RibbonStyleCompact | RibbonStyleTwoRow ///< 紧凑结构,2行模式 + }; + Q_ENUM(RibbonStyleFlag) + Q_DECLARE_FLAGS(RibbonStyles, RibbonStyleFlag) + Q_FLAG(RibbonStyles) + + /** + * @brief 定义当前ribbon 的状态 + */ + enum RibbonMode + { + MinimumRibbonMode, ///< 缩小模式 + NormalRibbonMode ///< 正常模式 + }; + Q_ENUM(RibbonMode) + + using FpCategoryIterate = std::function< bool(SARibbonCategory*) >; + using FpPannelIterate = SARibbonCategory::FpPannelIterate; public: - // 判断RibbonStyle是否为2行模式 - static bool isTwoRowStyle(RibbonStyles s); - static bool isThreeRowStyle(RibbonStyles s); - // 判断是否是office样式 - static bool isLooseStyle(RibbonStyles s); - static bool isCompactStyle(RibbonStyles s); - // 获取版本信息 - static QString versionString(); + // 判断RibbonStyle是否为2行模式 + static bool isTwoRowStyle(RibbonStyles s); + static bool isThreeRowStyle(RibbonStyles s); + // 判断是否是office样式 + static bool isLooseStyle(RibbonStyles s); + static bool isCompactStyle(RibbonStyles s); + // 获取版本信息 + static QString versionString(); - // 获取默认的上下文标签颜色列表 - static QList< QColor > defaultContextCategoryColorList(); + // 获取默认的上下文标签颜色列表 + static QList< QColor > defaultContextCategoryColorList(); - // - static void initHighDpi(); + // + static void initHighDpi(); public: - // 构造函数 - explicit SARibbonBar(QWidget* parent = nullptr); - ~SARibbonBar(); - // 获取applicationButton - QAbstractButton* applicationButton(); + // 构造函数 + explicit SARibbonBar(QWidget* parent = nullptr); + ~SARibbonBar(); + // 获取applicationButton + QAbstractButton* applicationButton(); - // 设置applicationButton - void setApplicationButton(QAbstractButton* btn); + // 设置applicationButton + void setApplicationButton(QAbstractButton* btn); - // 获取tabbar - SARibbonTabBar* ribbonTabBar(); + // 获取tabbar + SARibbonTabBar* ribbonTabBar(); - // 添加一个标签 - SARibbonCategory* addCategoryPage(const QString& title); - void addCategoryPage(SARibbonCategory* category); + // 添加一个标签 + SARibbonCategory* addCategoryPage(const QString& title); + void addCategoryPage(SARibbonCategory* category); - // 为了支持Qt designer,添加的一个重载函数 - Q_INVOKABLE void addCategoryPage(QWidget* category); + // 为了支持Qt designer,添加的一个重载函数 + Q_INVOKABLE void addCategoryPage(QWidget* category); - // 添加一个category,category的位置在index,如果当前category数量少于index,将插入到最后 - SARibbonCategory* insertCategoryPage(const QString& title, int index); - void insertCategoryPage(SARibbonCategory* category, int index); + // 添加一个category,category的位置在index,如果当前category数量少于index,将插入到最后 + SARibbonCategory* insertCategoryPage(const QString& title, int index); + void insertCategoryPage(SARibbonCategory* category, int index); - // 通过名字查找Category - SARibbonCategory* categoryByName(const QString& title) const; + // 通过名字查找Category + SARibbonCategory* categoryByName(const QString& title) const; - // 通过ObjectName查找Category - SARibbonCategory* categoryByObjectName(const QString& objname) const; + // 通过ObjectName查找Category + SARibbonCategory* categoryByObjectName(const QString& objname) const; - // 通过索引找到category,如果超过索引范围,会返回nullptr - SARibbonCategory* categoryByIndex(int index) const; + // 通过索引找到category,如果超过索引范围,会返回nullptr + SARibbonCategory* categoryByIndex(int index) const; - // 隐藏category,并不会删除或者取走,只是隐藏 - void hideCategory(SARibbonCategory* category); + // 隐藏category,并不会删除或者取走,只是隐藏 + void hideCategory(SARibbonCategory* category); - // 显示被隐藏的category - void showCategory(SARibbonCategory* category); + // 显示被隐藏的category + void showCategory(SARibbonCategory* category); - // 判断这个category是否在显示状态,也就是tabbar有这个category - bool isCategoryVisible(const SARibbonCategory* c) const; + // 判断这个category是否在显示状态,也就是tabbar有这个category + bool isCategoryVisible(const SARibbonCategory* c) const; - // 获取category的索引 - int categoryIndex(const SARibbonCategory* c) const; + // 获取category的索引 + int categoryIndex(const SARibbonCategory* c) const; - // 移动一个Category从from index到to index - void moveCategory(int from, int to); + // 移动一个Category从from index到to index + void moveCategory(int from, int to); - // 获取当前显示的所有的SARibbonCategory,包含未显示的SARibbonContextCategory的SARibbonCategory也一并返回 - QList< SARibbonCategory* > categoryPages(bool getAll = true) const; + // 获取当前显示的所有的SARibbonCategory,包含未显示的SARibbonContextCategory的SARibbonCategory也一并返回 + QList< SARibbonCategory* > categoryPages(bool getAll = true) const; - // 移除SARibbonCategory - void removeCategory(SARibbonCategory* category); + // 移除SARibbonCategory + void removeCategory(SARibbonCategory* category); - // 添加一个上下文标签 - SARibbonContextCategory* addContextCategory(const QString& title, - const QColor& color = QColor(), - const QVariant& id = QVariant()); - void addContextCategory(SARibbonContextCategory* context); + // 添加一个上下文标签 + SARibbonContextCategory* + addContextCategory(const QString& title, const QColor& color = QColor(), const QVariant& id = QVariant()); + void addContextCategory(SARibbonContextCategory* context); - // 显示一个上下文标签 - void showContextCategory(SARibbonContextCategory* context); + // 显示一个上下文标签 + void showContextCategory(SARibbonContextCategory* context); - // 隐藏一个上下文标签 - void hideContextCategory(SARibbonContextCategory* context); + // 隐藏一个上下文标签 + void hideContextCategory(SARibbonContextCategory* context); - // 判断上下文是否是在显示状态 - bool isContextCategoryVisible(SARibbonContextCategory* context); + // 判断上下文是否是在显示状态 + bool isContextCategoryVisible(SARibbonContextCategory* context); - // 设置上下文标签的显示或隐藏 - void setContextCategoryVisible(SARibbonContextCategory* context, bool visible); + // 设置上下文标签的显示或隐藏 + void setContextCategoryVisible(SARibbonContextCategory* context, bool visible); - // 获取所有的上下文标签 - QList< SARibbonContextCategory* > contextCategoryList() const; + // 获取所有的上下文标签 + QList< SARibbonContextCategory* > contextCategoryList() const; - // 移除ContextCategory - void destroyContextCategory(SARibbonContextCategory* context); + // 移除ContextCategory + void destroyContextCategory(SARibbonContextCategory* context); - // 设置为隐藏模式 - void setMinimumMode(bool isHide); + // 设置为隐藏模式 + void setMinimumMode(bool isHide); - // 当前Ribbon是否是隐藏模式 - bool isMinimumMode() const; + // 当前Ribbon是否是隐藏模式 + bool isMinimumMode() const; - // 设置显示隐藏ribbon按钮 - void showMinimumModeButton(bool isShow = true); + // 设置显示隐藏ribbon按钮 + void showMinimumModeButton(bool isShow = true); - // 是否显示隐藏ribbon按钮 - bool haveShowMinimumModeButton() const; + // 是否显示隐藏ribbon按钮 + bool haveShowMinimumModeButton() const; - // 隐藏ribbon对应的action - QAction* minimumModeAction() const; + // 隐藏ribbon对应的action + QAction* minimumModeAction() const; - // 当前的模式 - RibbonMode currentRibbonState() const; + // 当前的模式 + RibbonMode currentRibbonState() const; - // ribbon tab的高度 - int tabBarHeight() const; - void setTabBarHeight(int h, bool resizeByNow = true); + // ribbon tab的高度 + int tabBarHeight() const; + void setTabBarHeight(int h, bool resizeByNow = true); - // 标题栏的高度 - int titleBarHeight() const; - void setTitleBarHeight(int h, bool resizeByNow = true); + // 标题栏的高度 + int titleBarHeight() const; + void setTitleBarHeight(int h, bool resizeByNow = true); - // category的高度 - int categoryHeight() const; - void setCategoryHeight(int h, bool resizeByNow = true); + // category的高度 + int categoryHeight() const; + void setCategoryHeight(int h, bool resizeByNow = true); - // 获取正常模式下的mainBar的高度 - int normalModeMainBarHeight() const; + // 获取正常模式下的mainBar的高度 + int normalModeMainBarHeight() const; - // 最小模式下的MainBar高度 - int minimumModeMainBarHeight() const; + // 最小模式下的MainBar高度 + int minimumModeMainBarHeight() const; - // 激活tabbar右边的按钮群 - SARibbonButtonGroupWidget* activeRightButtonGroup(); + // 激活tabbar右边的按钮群 + SARibbonButtonGroupWidget* activeRightButtonGroup(); - // 右侧按钮群 - SARibbonButtonGroupWidget* rightButtonGroup(); + // 右侧按钮群 + SARibbonButtonGroupWidget* rightButtonGroup(); - // 激活QuickAccessBar - SARibbonQuickAccessBar* activeQuickAccessBar(); + // 激活QuickAccessBar + SARibbonQuickAccessBar* activeQuickAccessBar(); - // 快速响应栏 - SARibbonQuickAccessBar* quickAccessBar(); + // 快速响应栏 + SARibbonQuickAccessBar* quickAccessBar(); - // 设置ribbon的风格 - void setRibbonStyle(RibbonStyles v); - RibbonStyles currentRibbonStyle() const; + // 设置ribbon的风格 + void setRibbonStyle(RibbonStyles v); + RibbonStyles currentRibbonStyle() const; - // 设置当前ribbon的index - void setCurrentIndex(int index); + // 设置当前ribbon的index + void setCurrentIndex(int index); - // 返回当前的tab索引 - int currentIndex(); + // 返回当前的tab索引 + int currentIndex(); - // 确保标签显示出来 - void raiseCategory(SARibbonCategory* category); + // 确保标签显示出来 + void raiseCategory(SARibbonCategory* category); - // 判断当前的行数 - bool isTwoRowStyle() const; - bool isThreeRowStyle() const; + // 判断当前的行数 + bool isTwoRowStyle() const; + bool isThreeRowStyle() const; - // 判断当前的样式 - bool isLooseStyle() const; - bool isCompactStyle() const; + // 判断当前的样式 + bool isLooseStyle() const; + bool isCompactStyle() const; - // 更新ribbon的布局数据,此函数适用于一些关键性尺寸变化,换起ribbon下面元素的布局,在发现刷新问题时,可以调用此函数 - void updateRibbonGeometry(); + // 更新ribbon的布局数据,此函数适用于一些关键性尺寸变化,换起ribbon下面元素的布局,在发现刷新问题时,可以调用此函数 + void updateRibbonGeometry(); - // 设置pannel的模式 - SARibbonPannel::PannelLayoutMode pannelLayoutMode() const; - void setPannelLayoutMode(SARibbonPannel::PannelLayoutMode m); + // 设置pannel的模式 + SARibbonPannel::PannelLayoutMode pannelLayoutMode() const; + void setPannelLayoutMode(SARibbonPannel::PannelLayoutMode m); - // 设置tab在title上面,这样可以省略title区域 - void setTabOnTitle(bool on); - bool isTabOnTitle() const; + // 设置tab在title上面,这样可以省略title区域 + void setTabOnTitle(bool on); + bool isTabOnTitle() const; - // tabbar 底部会绘制一条线条,此接口定义线条颜色 - void setTabBarBaseLineColor(const QColor& clr); - QColor tabBarBaseLineColor() const; + // tabbar 底部会绘制一条线条,此接口定义线条颜色 + void setTabBarBaseLineColor(const QColor& clr); + QColor tabBarBaseLineColor() const; - // 设置标题颜色,如果不设置标题颜色,默认是SARibbonBar的qss的color属性 - void setWindowTitleTextColor(const QColor& clr); - QColor windowTitleTextColor() const; + // 设置标题颜色,如果不设置标题颜色,默认是SARibbonBar的qss的color属性 + void setWindowTitleTextColor(const QColor& clr); + QColor windowTitleTextColor() const; - // 设置标题的对齐方式 - void setWindowTitleAligment(Qt::Alignment al); - Qt::Alignment windowTitleAligment() const; + // 设置是否显示标题 + void setTitleVisible(bool on = false); + bool isTitleVisible() const; - // 设置按钮允许换行,注意图标大小是由文字决定的,两行文字会让图标变小,如果想图标变大,文字不换行是最好的 - void setEnableWordWrap(bool on); - bool isEnableWordWrap() const; + // 设置标题的背景颜色 + void setWindowTitleBackgroundBrush(const QBrush& bk); + QBrush windowTitleBackgroundBrush() const; - // 文本宽度估算时的宽度比高度系数,超过此系数的宽度时,开始尝试换行或者省略号显示 - void setButtonTextEllipsisAspectFactor(qreal fac = 1.4); - qreal buttonTextEllipsisAspectFactor() const; + // 设置标题的对齐方式 + void setWindowTitleAligment(Qt::Alignment al); + Qt::Alignment windowTitleAligment() const; - // 设置pannel的标题栏高度 - int pannelTitleHeight() const; - void setPannelTitleHeight(int h); + // 设置按钮允许换行,注意图标大小是由文字决定的,两行文字会让图标变小,如果想图标变大,文字不换行是最好的 + void setEnableWordWrap(bool on); + bool isEnableWordWrap() const; - // 设置pannel是否显示标题栏 - bool isEnableShowPannelTitle() const; - void setEnableShowPannelTitle(bool on); + // 文本宽度估算时的宽度比高度系数,超过此系数的宽度时,开始尝试换行或者省略号显示 + void setButtonTextEllipsisAspectFactor(qreal fac = 1.4); + qreal buttonTextEllipsisAspectFactor() const; - // 设置pannel的spacing - void setPannelSpacing(int n); - int pannelSpacing() const; + // 设置pannel的标题栏高度 + int pannelTitleHeight() const; + void setPannelTitleHeight(int h); - // 设置pannel按钮的icon尺寸,large action不受此尺寸影响 - void setPannelToolButtonIconSize(const QSize& s); - QSize pannelToolButtonIconSize() const; + // 设置pannel是否显示标题栏 + bool isEnableShowPannelTitle() const; + void setEnableShowPannelTitle(bool on); - // 获取SARibbonStackedWidget,谨慎使用此函数 - SARibbonStackedWidget* ribbonStackedWidget(); + // 设置pannel的spacing + void setPannelSpacing(int n); + int pannelSpacing() const; - // 设置是否显示标题 - void setTitleVisible(bool on = false); - bool isTitleVisible() const; + // 设置pannel按钮的icon尺寸,large action不受此尺寸影响 + void setPannelToolButtonIconSize(const QSize& s); + QSize pannelToolButtonIconSize() const; - // 上下文标签的颜色列表,上下文标签显示的时候,会从颜色列表中取颜色进行标签的渲染 - void setContextCategoryColorList(const QList< QColor >& cls); - QList< QColor > contextCategoryColorList() const; + // 获取SARibbonStackedWidget,谨慎使用此函数 + SARibbonStackedWidget* ribbonStackedWidget(); - // 设置context category 标题的文字颜色 - void setContextCategoryTitleTextColor(const QColor& clr); - QColor contextCategoryTitleTextColor() const; + // 上下文标签的颜色列表,上下文标签显示的时候,会从颜色列表中取颜色进行标签的渲染 + void setContextCategoryColorList(const QList< QColor >& cls); + QList< QColor > contextCategoryColorList() const; - // 设置ribbon的对齐方式 - void setRibbonAlignment(SARibbonAlignment al); - SARibbonAlignment ribbonAlignment() const; + // 设置context category 标题的文字颜色 + void setContextCategoryTitleTextColor(const QColor& clr); + QColor contextCategoryTitleTextColor() const; - // 此函数会遍历SARibbonBar下的所有Category,执行函数指针(bool(SARibbonCategory*)),函数指针返回false则停止迭代 - bool iterate(FpCategoryIterate fp); - // 此函数会遍历SARibbonBar下的所有Category,并迭代所有的pannel,执行函数指针(bool(SARibbonPannel*)),函数指针返回false则停止迭代 - bool iterate(FpPannelIterate fp); + // 设置ribbon的对齐方式 + void setRibbonAlignment(SARibbonAlignment al); + SARibbonAlignment ribbonAlignment() const; - // 设置边角widget可见性,对于mdi窗口,会出现TopLeftCorner和TopRightCorner两个corner widget - void setCornerWidgetVisible(bool on, Qt::Corner c = Qt::TopLeftCorner); + // 此函数会遍历SARibbonBar下的所有Category,执行函数指针(bool(SARibbonCategory*)),函数指针返回false则停止迭代 + bool iterate(FpCategoryIterate fp); + // 此函数会遍历SARibbonBar下的所有Category,并迭代所有的pannel,执行函数指针(bool(SARibbonPannel*)),函数指针返回false则停止迭代 + bool iterate(FpPannelIterate fp); + + // 设置边角widget可见性,对于mdi窗口,会出现TopLeftCorner和TopRightCorner两个corner widget + void setCornerWidgetVisible(bool on, Qt::Corner c = Qt::TopLeftCorner); Q_SIGNALS: - /** - @brief 应用按钮点击响应 - 左上角的按钮,通过关联此信号触发应用按钮点击的效果 - - 例如想点击按钮后弹出一个全屏的窗口(如office这些) - */ - void applicationButtonClicked(); - - /** - @brief 标签页变化触发的信号 - @param index - */ - void currentRibbonTabChanged(int index); - - /** - @brief ribbon的状态发生了变化后触发此信号 - @param nowState 变更之后的ribbon状态 - */ - void ribbonModeChanged(SARibbonBar::RibbonMode nowState); - - /** - @brief ribbon的状态发生了变化后触发此信号 - @param nowStyle 变更之后的ribbon样式 - */ - void ribbonStyleChanged(SARibbonBar::RibbonStyles nowStyle); - - /** - @brief 标题栏高度发生了变化的信号 - @param oldHeight - @param newHeight - */ - void titleBarHeightChanged(int oldHeight, int newHeight); - - /** - * @brief 参考QToolBar::actionTriggered的信号 - * @param action - */ - void actionTriggered(QAction* action); + /** + @brief 应用按钮点击响应 - 左上角的按钮,通过关联此信号触发应用按钮点击的效果 + + 例如想点击按钮后弹出一个全屏的窗口(如office这些) + */ + void applicationButtonClicked(); + + /** + @brief 标签页变化触发的信号 + @param index + */ + void currentRibbonTabChanged(int index); + + /** + @brief ribbon的状态发生了变化后触发此信号 + @param nowState 变更之后的ribbon状态 + */ + void ribbonModeChanged(SARibbonBar::RibbonMode nowState); + + /** + @brief ribbon的状态发生了变化后触发此信号 + @param nowStyle 变更之后的ribbon样式 + */ + void ribbonStyleChanged(SARibbonBar::RibbonStyles nowStyle); + + /** + @brief 标题栏高度发生了变化的信号 + @param oldHeight + @param newHeight + */ + void titleBarHeightChanged(int oldHeight, int newHeight); + + /** + * @brief 参考QToolBar::actionTriggered的信号 + * @param action + */ + void actionTriggered(QAction* action); protected: - bool eventFilter(QObject* obj, QEvent* e) override; - // 根据情况重置tabbar的宽度,主要针对wps模式 - int calcMinTabBarWidth() const; - // 更新 - void updateCategoryTitleToTabName(); - // 告知WindowButtonGroup的尺寸 - void setWindowButtonGroupSize(const QSize& s); + bool eventFilter(QObject* obj, QEvent* e) override; + // 根据情况重置tabbar的宽度,主要针对wps模式 + int calcMinTabBarWidth() const; + // 更新 + void updateCategoryTitleToTabName(); + // 告知WindowButtonGroup的尺寸 + void setWindowButtonGroupSize(const QSize& s); protected Q_SLOTS: - void onWindowTitleChanged(const QString& title); - void onWindowIconChanged(const QIcon& i); - void onCategoryWindowTitleChanged(const QString& title); - void onStackWidgetHided(); - virtual void onCurrentRibbonTabChanged(int index); - virtual void onCurrentRibbonTabClicked(int index); - virtual void onCurrentRibbonTabDoubleClicked(int index); - void onContextsCategoryPageAdded(SARibbonCategory* category); - void onContextsCategoryCategoryNameChanged(SARibbonCategory* category, const QString& title); - void onTabMoved(int from, int to); + void onWindowTitleChanged(const QString& title); + void onWindowIconChanged(const QIcon& i); + void onCategoryWindowTitleChanged(const QString& title); + void onStackWidgetHided(); + virtual void onCurrentRibbonTabChanged(int index); + virtual void onCurrentRibbonTabClicked(int index); + virtual void onCurrentRibbonTabDoubleClicked(int index); + void onContextsCategoryPageAdded(SARibbonCategory* category); + void onContextsCategoryCategoryNameChanged(SARibbonCategory* category, const QString& title); + void onTabMoved(int from, int to); private: - int tabIndex(SARibbonCategory* obj); - void resizeAll(); - void resizeInLooseStyle(); - void resizeInCompactStyle(); - void paintInLooseStyle(); - void paintInCompactStyle(); - void resizeStackedContainerWidget(); - - // 刷新所有ContextCategoryManagerData,这个在单独一个Category删除时调用 - void updateContextCategoryManagerData(); - void synchronousCategoryData(bool autoUpdate = true); + int tabIndex(SARibbonCategory* obj); + void resizeAll(); + void resizeInLooseStyle(); + void resizeInCompactStyle(); + void paintInLooseStyle(); + void paintInCompactStyle(); + void resizeStackedContainerWidget(); + + // 刷新所有ContextCategoryManagerData,这个在单独一个Category删除时调用 + void updateContextCategoryManagerData(); + void synchronousCategoryData(bool autoUpdate = true); + // 把窗口标题文字转换为显示的文字,这里主要针对[*]占位符进行替换 + QString toDisplayTitleText(const QString& title) const; protected: - virtual void paintEvent(QPaintEvent* e) override; - virtual void resizeEvent(QResizeEvent* e) override; - virtual void moveEvent(QMoveEvent* e) override; - virtual void changeEvent(QEvent* e) override; - virtual bool event(QEvent* e) override; - virtual void paintTabbarBaseLine(QPainter& painter); - virtual void paintWindowTitle(QPainter& painter, const QString& title, const QRect& titleRegion); - virtual void paintContextCategoryTab(QPainter& painter, const QString& title, const QRect& contextRect, const QColor& color); + virtual void paintEvent(QPaintEvent* e) override; + virtual void resizeEvent(QResizeEvent* e) override; + virtual void moveEvent(QMoveEvent* e) override; + virtual void changeEvent(QEvent* e) override; + virtual bool event(QEvent* e) override; + virtual void paintTabbarBaseLine(QPainter& painter); + virtual void paintWindowTitle(QPainter& painter, const QString& title, const QRect& titleRegion); + virtual void + paintContextCategoryTab(QPainter& painter, const QString& title, const QRect& contextRect, const QColor& color); #if SA_DEBUG_PRINT_SARIBBONBAR - SA_RIBBON_EXPORT friend QDebug operator<<(QDebug debug, const SARibbonBar& ribbon); + SA_RIBBON_EXPORT friend QDebug operator<<(QDebug debug, const SARibbonBar& ribbon); #endif }; Q_DECLARE_OPERATORS_FOR_FLAGS(SARibbonBar::RibbonStyles) diff --git a/src/SARibbonBar/SARibbonBarVersionInfo.h b/src/SARibbonBar/SARibbonBarVersionInfo.h index f27ff39..4c59443 100644 --- a/src/SARibbonBar/SARibbonBarVersionInfo.h +++ b/src/SARibbonBar/SARibbonBarVersionInfo.h @@ -20,14 +20,14 @@ * @def ribbon的数字版本 MAJ.MIN.{PAT} */ #ifndef SA_RIBBON_BAR_VERSION_PAT -#define SA_RIBBON_BAR_VERSION_PAT 8 +#define SA_RIBBON_BAR_VERSION_PAT 9 #endif /** * @def 版本号(字符串) */ #ifndef SARIBBON_VERSION -#define SARIBBON_VERSION "2.2.8" +#define SARIBBON_VERSION "2.2.9" #endif #endif // SARIBBONVERSIONINFO_H