SARibbon 2.5.2
SARibbon wiki
载入中...
搜索中...
未找到
SARibbonButtonLayoutStrategy.h
1#ifndef SARIBBONBUTTONLAYOUTSTRATEGY_H
2#define SARIBBONBUTTONLAYOUTSTRATEGY_H
3
4#include "SARibbonGlobal.h"
5#include <QStyleOptionToolButton>
6#include <QSize>
7#include <QRect>
8#include <memory>
9
10class QFontMetrics;
11class QWidget;
12class SARibbonToolButton; // 前向声明
13
17enum class SARibbonButtonType
18{
21};
22
28struct SA_RIBBON_EXPORT SARibbonButtonLayoutRects
29{
30 QRect iconRect;
31 QRect textRect;
33
34 void clear()
35 {
36 iconRect = QRect();
37 textRect = QRect();
38 indicatorRect = QRect();
39 }
40
41 bool isValid() const
42 {
43 return iconRect.isValid() || textRect.isValid() || indicatorRect.isValid();
44 }
45};
46
52struct SA_RIBBON_EXPORT SARibbonButtonLayoutContext
53{
54 const QWidget* buttonWidget { nullptr };
55 int spacing { 1 };
56 int indicatorLength { 8 };
57 QSize largeIconSize { 32, 32 };
58 QSize smallIconSize { 16, 16 };
59 qreal twoLineHeightFactor { 2.05 };
60 qreal oneLineHeightFactor { 1.2 };
61 qreal buttonMaximumAspectRatio { 1.4 };
62 bool enableWordWrap { true };
63 mutable bool isTextNeedWrap { false };
64 int maximumWidth { QWIDGETSIZE_MAX };
65
68};
69
75class SA_RIBBON_EXPORT SARibbonButtonLayoutStrategy
76{
77public:
78 virtual ~SARibbonButtonLayoutStrategy() = default;
79
86 virtual void calculateDrawRects(const QStyleOptionToolButton& opt,
88 const SARibbonButtonLayoutContext& ctx) const = 0;
89
96 virtual QSize calculateSizeHint(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const = 0;
97
104 virtual int calculateTextHeight(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const = 0;
105
115 virtual int estimateTextWidth(int buttonHeight,
116 int textHeight,
117 const QString& text,
118 const QFontMetrics& fm,
119 SARibbonButtonLayoutContext& ctx) const; // 非const因为可能修改ctx.isTextNeedWrap
120
121protected:
125 static bool hasIndicator(const QStyleOptionToolButton& opt);
126
130 static QSize adjustIconSize(const QRect& buttonRect, const QSize& originIconSize);
131
135 static QString simplifiedText(const QString& str);
136};
137
142{
143public:
144 void calculateDrawRects(const QStyleOptionToolButton& opt,
146 const SARibbonButtonLayoutContext& ctx) const override;
147
148 QSize calculateSizeHint(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const override;
149
150 int calculateTextHeight(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const override;
151
152private:
153 void calculateIconOnlyRects(const QStyleOptionToolButton& opt,
155 const SARibbonButtonLayoutContext& ctx) const;
156
157 void calculateTextOnlyRects(const QStyleOptionToolButton& opt,
159 const SARibbonButtonLayoutContext& ctx) const;
160
161 void calculateIconAndTextRects(const QStyleOptionToolButton& opt,
163 const SARibbonButtonLayoutContext& ctx) const;
164};
165
170{
171public:
172 void calculateDrawRects(const QStyleOptionToolButton& opt,
174 const SARibbonButtonLayoutContext& ctx) const override;
175
176 QSize calculateSizeHint(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const override;
177
178 int calculateTextHeight(const QStyleOptionToolButton& opt, const SARibbonButtonLayoutContext& ctx) const override;
179
180private:
181 void calculateIconOnlyRects(const QStyleOptionToolButton& opt,
183 const SARibbonButtonLayoutContext& ctx) const;
184
185 void calculateTextOnlyRects(const QStyleOptionToolButton& opt,
187 const SARibbonButtonLayoutContext& ctx) const;
188
189 void calculateIconAndTextRects(const QStyleOptionToolButton& opt,
191 const SARibbonButtonLayoutContext& ctx) const;
192};
193
198{
199public:
200 static std::unique_ptr< SARibbonButtonLayoutStrategy > createStrategy(SARibbonButtonType type);
201};
202
203#endif // SARIBBONBUTTONLAYOUTSTRATEGY_H
布局策略工厂
Definition SARibbonButtonLayoutStrategy.h:198
Ribbon按钮布局策略抽象基类
Definition SARibbonButtonLayoutStrategy.h:76
virtual void calculateDrawRects(const QStyleOptionToolButton &opt, SARibbonButtonLayoutRects &rects, const SARibbonButtonLayoutContext &ctx) const =0
计算绘制区域矩形
virtual QSize calculateSizeHint(const QStyleOptionToolButton &opt, const SARibbonButtonLayoutContext &ctx) const =0
计算按钮的size hint
virtual int calculateTextHeight(const QStyleOptionToolButton &opt, const SARibbonButtonLayoutContext &ctx) const =0
计算文本绘制区域高度
大按钮布局策略
Definition SARibbonButtonLayoutStrategy.h:142
小按钮布局策略
Definition SARibbonButtonLayoutStrategy.h:170
Definition SARibbonToolButton.h:31
@ SmallButton
Small button type, corresponding to the small button in SARibbonBar, equivalent to a normal toolbar b...
Definition SARibbonToolButton.h:49
@ LargeButton
Large button type, corresponding to the large button in SARibbonBar / 大按钮类型,此类型对应SARibbonBar的大按钮
Definition SARibbonToolButton.h:43
布局上下文
Definition SARibbonButtonLayoutStrategy.h:53
按钮布局矩形集合
Definition SARibbonButtonLayoutStrategy.h:29
QRect textRect
文本绘制区域
Definition SARibbonButtonLayoutStrategy.h:31
QRect indicatorRect
指示器(下拉箭头)绘制区域
Definition SARibbonButtonLayoutStrategy.h:32
QRect iconRect
图标绘制区域
Definition SARibbonButtonLayoutStrategy.h:30