148 lines
4.8 KiB
C
148 lines
4.8 KiB
C
![]() |
#ifndef SARIBBONGLOBAL_H
|
|||
|
#define SARIBBONGLOBAL_H
|
|||
|
#include <memory>
|
|||
|
#include <QtGlobal>
|
|||
|
#include <QObject>
|
|||
|
#include "SARibbonBarVersionInfo.h"
|
|||
|
class QWidget;
|
|||
|
|
|||
|
#ifndef SA_RIBBON_BAR_NO_EXPORT
|
|||
|
#if defined(SA_RIBBON_BAR_MAKE_LIB) // 定义此宏将构建library
|
|||
|
#define SA_RIBBON_EXPORT Q_DECL_EXPORT
|
|||
|
#else
|
|||
|
#define SA_RIBBON_EXPORT Q_DECL_IMPORT
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
#ifndef SA_RIBBON_EXPORT
|
|||
|
#define SA_RIBBON_EXPORT
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @def 模仿Q_DECLARE_PRIVATE,但不用前置声明而是作为一个内部类
|
|||
|
*/
|
|||
|
#ifndef SA_RIBBON_DECLARE_PRIVATE
|
|||
|
#define SA_RIBBON_DECLARE_PRIVATE(classname) \
|
|||
|
class PrivateData; \
|
|||
|
friend class classname::PrivateData; \
|
|||
|
std::unique_ptr< PrivateData > d_ptr;
|
|||
|
#endif
|
|||
|
/**
|
|||
|
* @def 模仿Q_DECLARE_PUBLIC
|
|||
|
*/
|
|||
|
#ifndef SA_RIBBON_DECLARE_PUBLIC
|
|||
|
#define SA_RIBBON_DECLARE_PUBLIC(classname) \
|
|||
|
friend class classname; \
|
|||
|
classname* q_ptr { nullptr }; \
|
|||
|
PrivateData(const PrivateData&) = delete; \
|
|||
|
PrivateData& operator=(const PrivateData&) = delete;
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 定义Ribbon的对其方式,目前支持左对齐和居中对其
|
|||
|
*/
|
|||
|
enum class SARibbonAlignment
|
|||
|
{
|
|||
|
AlignLeft, ///< 左对齐,tab栏左对齐,同时category也是左对齐
|
|||
|
AlignCenter ///< 居中对其,tab栏居中对齐,同时category也是居中对齐
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ribbon主题
|
|||
|
*
|
|||
|
* 注意,由于有些qss的尺寸,在C++代码中无法获取到,因此针对用户自定义的qss主题,有些尺寸是需要手动设置进去的
|
|||
|
*
|
|||
|
* 例如ribbon tab的margin信息,在QTabBar是无法获取到,而这个影响了SARibbonContextCategory的绘制,
|
|||
|
* 因此,在设置qss后需要针对margin信息重新设置进SARibbonTabBar中
|
|||
|
*/
|
|||
|
enum class SARibbonTheme
|
|||
|
{
|
|||
|
RibbonThemeOffice2013, ///< office2013主题
|
|||
|
RibbonThemeOffice2016Blue, ///< office2016-蓝色主题
|
|||
|
RibbonThemeOffice2021Blue, ///< office2021-蓝色主题
|
|||
|
RibbonThemeWindows7, ///< win7主题
|
|||
|
RibbonThemeDark, ///< 暗色主题
|
|||
|
RibbonThemeDark2
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* @def 属性,用于标记是否可以进行自定义,用于动态设置到@ref SARibbonCategory 和@ref SARibbonPannel
|
|||
|
* 值为bool,在为true时,可以通过@ref SARibbonCustomizeWidget 改变这个SARibbonCategory和SARibbonPannel的布局,
|
|||
|
* 默认不会有此属性,仅在有此属性且为true时才会在SARibbonCustomizeWidget中能显示为可设置
|
|||
|
*/
|
|||
|
#ifndef SA_RIBBON_BAR_PROP_CAN_CUSTOMIZE
|
|||
|
#define SA_RIBBON_BAR_PROP_CAN_CUSTOMIZE "_sa_isCanCustomize"
|
|||
|
#endif
|
|||
|
|
|||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
|
|||
|
#ifndef SA_FONTMETRICS_WIDTH
|
|||
|
#define SA_FONTMETRICS_WIDTH(fm, str) fm.horizontalAdvance(str)
|
|||
|
#endif
|
|||
|
#else
|
|||
|
#ifndef SA_FONTMETRICS_WIDTH
|
|||
|
#define SA_FONTMETRICS_WIDTH(fm, str) fm.width(str)
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
|||
|
#ifndef SA_MOUSEEVENT_GLOBALPOS_POINT
|
|||
|
#define SA_MOUSEEVENT_GLOBALPOS_POINT(MouseEventPtr) MouseEventPtr->globalPosition().toPoint()
|
|||
|
#endif
|
|||
|
#else
|
|||
|
#ifndef SA_MOUSEEVENT_GLOBALPOS_POINT
|
|||
|
#define SA_MOUSEEVENT_GLOBALPOS_POINT(MouseEventPtr) MouseEventPtr->globalPos()
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
|||
|
#ifndef SA_HOVEREVENT_POS_POINT
|
|||
|
#define SA_HOVEREVENT_POS_POINT(HoverEventPtr) HoverEventPtr->position().toPoint()
|
|||
|
#endif
|
|||
|
#else
|
|||
|
#ifndef SA_HOVEREVENT_POS_POINT
|
|||
|
#define SA_HOVEREVENT_POS_POINT(HoverEventPtr) HoverEventPtr->pos()
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
@def 定义此宏,将打印和尺寸刷新相关的信息
|
|||
|
|
|||
|
仅用于调试
|
|||
|
*/
|
|||
|
#ifndef SA_DEBUG_PRINT_SIZE_HINT
|
|||
|
#define SA_DEBUG_PRINT_SIZE_HINT 0
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
@def 定义此宏,将打印事件
|
|||
|
|
|||
|
仅用于调试
|
|||
|
*/
|
|||
|
#ifndef SA_DEBUG_PRINT_EVENT
|
|||
|
#define SA_DEBUG_PRINT_EVENT 0
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
@def 定义此宏,qDebug将支持SARibbonBar的属性打印
|
|||
|
|
|||
|
仅用于调试
|
|||
|
*/
|
|||
|
#ifndef SA_DEBUG_PRINT_SARIBBONBAR
|
|||
|
#define SA_DEBUG_PRINT_SARIBBONBAR 0
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 全局的设置ribbon theme函数
|
|||
|
*
|
|||
|
* 之所以提供此函数,是因为在某些情况下,SARibbonBar不用在SARibbonMainWindow情况下的时候,也需要设置主题,
|
|||
|
* 但主题设置是在SARibbonMainWindow下的为了能在非SARibbonMainWindow下也能设置主题,这里提供@sa sa_set_ribbon_theme函数,
|
|||
|
* 可以这样使用:
|
|||
|
* @code
|
|||
|
* @endcode
|
|||
|
*
|
|||
|
* @param w
|
|||
|
* @param theme
|
|||
|
*/
|
|||
|
void SA_RIBBON_EXPORT sa_set_ribbon_theme(QWidget* w, SARibbonTheme theme);
|
|||
|
|
|||
|
#endif // SARIBBONGLOBAL_H
|