#ifndef SARIBBONTOOLBUTTON_H #define SARIBBONTOOLBUTTON_H #include "SARibbonGlobal.h" #include #include /** * @brief Ribbon界面适用的toolButton * * 相对于普通toolbutton,主要多了两个类型设置,@ref setButtonType 和 @ref setLargeButtonType * * @note @sa setIconSize 函数不在起作用,iconsize是根据当前尺寸动态调整的 */ class SA_RIBBON_EXPORT SARibbonToolButton : public QToolButton { Q_OBJECT SA_RIBBON_DECLARE_PRIVATE(SARibbonToolButton) public: /** * @brief 按钮样式 */ enum RibbonButtonType { LargeButton, SmallButton }; Q_ENUM(RibbonButtonType) public: SARibbonToolButton(QWidget* parent = Q_NULLPTR); SARibbonToolButton(QAction* defaultAction, QWidget* parent = Q_NULLPTR); ~SARibbonToolButton(); //标记按钮的样式,按钮的样式有不同的渲染方式 RibbonButtonType buttonType() const; void setButtonType(const RibbonButtonType& buttonType); //是否是小按钮 bool isSmallRibbonButton() const; //是否是大按钮 bool isLargeRibbonButton() const; //最小尺寸提示 virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE; //获取间距 int spacing() const; //更新尺寸 void updateRect(); virtual QSize sizeHint() const Q_DECL_OVERRIDE; public: //在lite模式下是否允许文字换行 static void setEnableWordWrap(bool on); static bool isEnableWordWrap(); protected: virtual void paintEvent(QPaintEvent* e) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent* e) Q_DECL_OVERRIDE; virtual void mouseMoveEvent(QMouseEvent* e) Q_DECL_OVERRIDE; virtual void mousePressEvent(QMouseEvent* e) Q_DECL_OVERRIDE; virtual void mouseReleaseEvent(QMouseEvent* e) Q_DECL_OVERRIDE; virtual void focusOutEvent(QFocusEvent* e) Q_DECL_OVERRIDE; virtual void leaveEvent(QEvent* e) Q_DECL_OVERRIDE; virtual bool hitButton(const QPoint& pos) const Q_DECL_OVERRIDE; virtual bool event(QEvent* e) Q_DECL_OVERRIDE; //事件改变 - 主要为了捕获字体的改变 virtual void changeEvent(QEvent* e) Q_DECL_OVERRIDE; virtual void actionEvent(QActionEvent* e) Q_DECL_OVERRIDE; protected: //绘制按钮 virtual void paintButton(QPainter& p, const QStyleOptionToolButton& opt); //绘制图标 virtual void paintIcon(QPainter& p, const QStyleOptionToolButton& opt, const QRect& iconDrawRect); //绘制文本 virtual void paintText(QPainter& p, const QStyleOptionToolButton& opt, const QRect& textDrawRect); //绘制Indicator virtual void paintIndicator(QPainter& p, const QStyleOptionToolButton& opt, const QRect& indicatorDrawRect); private: static void drawArrow(const QStyle* style, const QStyleOptionToolButton* toolbutton, const QRect& rect, QPainter* painter, const QWidget* widget = 0); protected: }; namespace SA { QDebug operator<<(QDebug debug, const QStyleOptionToolButton& opt); } #endif // SARIBBONTOOLBUTTON_H