2019-12-03 08:47:10 +08:00
|
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2019 ~ 2019 touwoyimuli. All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Author: touwoyimuli <touwoyimuli@gmai.com>
|
|
|
|
|
*
|
|
|
|
|
* github: https://github.com/touwoyimuli
|
|
|
|
|
* blogs: https://touwoyimuli.github.io/
|
|
|
|
|
*
|
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
* any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program. If not, see <https://touwoyimuli.github.io/>.
|
|
|
|
|
*/
|
|
|
|
|
#ifndef EXMYSTYLE_H
|
|
|
|
|
#define EXMYSTYLE_H
|
|
|
|
|
|
2019-12-04 00:21:42 +08:00
|
|
|
|
#include "ExMyGlobal.h"
|
|
|
|
|
|
|
|
|
|
#include "qglobal.h"
|
2019-12-03 08:47:10 +08:00
|
|
|
|
#include <QCommonStyle>
|
|
|
|
|
|
2019-12-04 00:21:42 +08:00
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
|
//class QCommonStyle;
|
|
|
|
|
QT_END_NAMESPACE
|
2019-12-03 08:47:10 +08:00
|
|
|
|
|
2019-12-04 00:21:42 +08:00
|
|
|
|
EXWIDGET_BEGIN_NAMESPACE
|
2019-12-03 08:47:10 +08:00
|
|
|
|
class ExMyStyle : public QCommonStyle
|
|
|
|
|
{
|
2019-12-16 00:03:48 +08:00
|
|
|
|
// Q_OBJECT
|
|
|
|
|
|
2019-12-03 08:47:10 +08:00
|
|
|
|
public:
|
|
|
|
|
ExMyStyle();
|
2019-12-04 00:21:42 +08:00
|
|
|
|
|
2019-12-13 00:12:33 +08:00
|
|
|
|
// enum ControlElement {
|
|
|
|
|
// CE_SwitchButton = QStyle::CE_CustomBase + 1,
|
|
|
|
|
// CE_CustomBase = QStyle::CE_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
2019-12-16 00:03:48 +08:00
|
|
|
|
public:
|
|
|
|
|
// enum PrimitiveElement {
|
|
|
|
|
// PE_ItemBackground = QStyle::PE_CustomBase + 1, //列表项的背景色
|
|
|
|
|
// PE_SwitchButtonGroove,
|
|
|
|
|
// PE_SwitchButtonHandle,
|
|
|
|
|
// PE_CustomBase = QStyle::PE_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum ControlElement {
|
|
|
|
|
// CE_IconButton = QStyle::CE_CustomBase + 1,
|
|
|
|
|
// CE_SwitchButton,
|
|
|
|
|
// CE_CustomBase = QStyle::CE_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum SubElement {
|
|
|
|
|
// SE_IconButtonIcon = QStyle::SE_CustomBase + 1,
|
|
|
|
|
// SE_SwitchButtonGroove,
|
|
|
|
|
// SE_SwitchButtonHandle,
|
|
|
|
|
// SE_CustomBase = QStyle::SE_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum PixelMetric {
|
|
|
|
|
// PM_FocusBorderWidth = QStyle::PM_CustomBase + 1, //控件焦点状态的边框宽度
|
|
|
|
|
// PM_FrameRadius,
|
|
|
|
|
// PM_CustomBase = QStyle::PM_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum ContentsType {
|
|
|
|
|
// CT_IconButton = QStyle::CT_CustomBase + 1,
|
|
|
|
|
// CT_SwitchButton,
|
|
|
|
|
// CT_CustomBase = QStyle::CT_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum StyleHint {
|
|
|
|
|
// SH_CustomBase = QStyle::SH_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// enum StandardPixmap {
|
|
|
|
|
// SP_CustomBase = QStyle::SP_CustomBase + 0xf00000
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// /*枚举通过按位 ~ ^ | !来计算得到需要组合
|
|
|
|
|
// * //0b对应的二进制 0x十六进制 对应的十进制
|
|
|
|
|
// * 0b0000 0001 0x0000 0001 1
|
|
|
|
|
// * 0b0000 0010 0x0000 0002 2
|
|
|
|
|
// * 0b0000 0100 0x0000 0004 4
|
|
|
|
|
// * 0b0000 1000 0x0000 0006 8
|
|
|
|
|
// * 0b0001 0000 0x0000 0010 16
|
|
|
|
|
// */
|
|
|
|
|
|
|
|
|
|
// enum StyleState {
|
|
|
|
|
// SS_NormalState = 0x00000000,
|
|
|
|
|
// SS_HoverState = 0x00000001,
|
|
|
|
|
// SS_PressState = 0x00000002,
|
|
|
|
|
// };
|
|
|
|
|
// Q_DECLARE_FLAGS(StateFlags, StyleState) //而类型定义(typedef)和操作符重载正是宏Q_DECLARE_FLAGS 和 Q_DECLARE_OPERATORS_FOR_FLAGS (均无关于元对象系统)
|
|
|
|
|
|
|
|
|
|
//静态static函数
|
|
|
|
|
// static void drawPrimitive(const QStyle *style, ExCustomStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w);
|
|
|
|
|
// static void drawControl(const QStyle *style, ExCustomStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w);
|
|
|
|
|
// static int pixelMetric(const QStyle *style, QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget);
|
|
|
|
|
// static QRect subElementRect(const QStyle *style, ExCustomStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget);
|
|
|
|
|
// static QSize sizeFromContents(const QStyle *style, ExCustomStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w);
|
|
|
|
|
// static QIcon standardIcon(const QStyle *style, ExCustomStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//内联inline函数,然后[自动选择]是调用静态函数,还是重写的基类的函数
|
|
|
|
|
inline void drawPrimitive(ExMyStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const;
|
|
|
|
|
// inline void drawControl(ExCustomStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const;
|
|
|
|
|
// inline QRect subElementRect(ExCustomStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget) const;
|
|
|
|
|
// inline int pixelMetric(ExCustomStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const;
|
|
|
|
|
// inline QSize sizeFromContents(ExCustomStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const;
|
|
|
|
|
// inline int styleHint(ExCustomStyle::StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const;
|
|
|
|
|
|
|
|
|
|
// inline void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const; //这三个不用写成内联函数,且会编译不通过
|
|
|
|
|
// inline QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const;
|
|
|
|
|
// inline QStyle::SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget) const;
|
|
|
|
|
// virtual void polish(QPalette &palette) override; //通常在此函数内指定配色方案,也即配置调色板
|
|
|
|
|
// virtual void polish(QWidget *widget) override; //当样式应用到窗口部件时,polish(QWidget*)就会调用,从而允许我们进行最后的定制
|
|
|
|
|
// virtual void unpolish(QWidget *widget) override; //当动态改变样式的时候,unpolish就会调用,来撤销polish的影响。polish(QWidget*)一般用做窗口部件的事件过滤器。
|
|
|
|
|
|
|
|
|
|
// QStyle interface 重写QCommonStyle重载的函数
|
2019-12-04 00:21:42 +08:00
|
|
|
|
public:
|
|
|
|
|
virtual void polish(QWidget *widget) override;
|
|
|
|
|
virtual void unpolish(QWidget *widget) override;
|
|
|
|
|
virtual void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override;
|
|
|
|
|
virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const override;
|
|
|
|
|
virtual QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const override;
|
|
|
|
|
virtual QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override;
|
|
|
|
|
virtual int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override;
|
|
|
|
|
virtual int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override;
|
|
|
|
|
|
2019-12-16 00:03:48 +08:00
|
|
|
|
|
|
|
|
|
//重实现,使得父类的多个同名 函数 (不同参数) 任然可以在本类里面使用
|
|
|
|
|
using QCommonStyle::drawPrimitive;
|
|
|
|
|
using QCommonStyle::drawControl;
|
|
|
|
|
using QCommonStyle::subElementRect;
|
|
|
|
|
using QCommonStyle::pixelMetric;
|
|
|
|
|
using QCommonStyle::sizeFromContents;
|
|
|
|
|
using QCommonStyle::styleHint;
|
|
|
|
|
using QCommonStyle::standardIcon;
|
|
|
|
|
|
2019-12-04 00:21:42 +08:00
|
|
|
|
public:
|
2019-12-03 08:47:10 +08:00
|
|
|
|
};
|
2019-12-04 00:21:42 +08:00
|
|
|
|
EXWIDGET_END_NAMESPACE
|
2019-12-03 08:47:10 +08:00
|
|
|
|
|
|
|
|
|
#endif // EXMYSTYLE_H
|