diff --git a/QtMyStyleEx/QtExample02/QtStyleEx/QtStyleEx.pro b/QtMyStyleEx/QtExample02/QtStyleEx/QtStyleEx.pro index 41323ca..c9dad30 100644 --- a/QtMyStyleEx/QtExample02/QtStyleEx/QtStyleEx.pro +++ b/QtMyStyleEx/QtExample02/QtStyleEx/QtStyleEx.pro @@ -46,10 +46,12 @@ CONFIG += c++11 SOURCES += \ main.cpp \ - widget.cpp + widget.cpp \ + mystyle.cpp HEADERS += \ - widget.h + widget.h \ + mystyle.h # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.cpp b/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.cpp new file mode 100644 index 0000000..9d596b3 --- /dev/null +++ b/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.cpp @@ -0,0 +1,83 @@ +/* + * + * Gmail: touwoyimuli@gmai.com + * blogs: https://blog.csdn.net/qq_33154343 + * + * ------------------------------------------------- + * Copyright 2019~2020 touwoyimuli + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mystyle.h" + +#include + +MyStyle::MyStyle() +{ + +} + +void MyStyle::polish(QWidget *widget) +{ + QCommonStyle::polish(widget); +} + +void MyStyle::unpolish(QWidget *widget) +{ + QCommonStyle::unpolish(widget); +} + +void MyStyle::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const +{ + QCommonStyle::drawPrimitive(pe, opt, p, w); +} + +void MyStyle::drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const +{ + return QCommonStyle::drawControl(element, opt, p, w); +} + +QRect MyStyle::subElementRect(QStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget) const +{ + return QCommonStyle::subElementRect(subElement, option, widget); +} + +void MyStyle::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const +{ + QCommonStyle::drawComplexControl(cc, opt, p, widget); +} + +QRect MyStyle::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const +{ + return QCommonStyle::subControlRect(cc, opt, sc, widget); +} + +int MyStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const +{ + return QCommonStyle::pixelMetric(metric, option, widget); +} + +QSize MyStyle::sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const +{ + return QCommonStyle::sizeFromContents(ct, opt, contentsSize, w); +} + +int MyStyle::styleHint(QStyle::StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const +{ + return QCommonStyle::styleHint(stylehint, opt, widget, returnData); +} + + + + diff --git a/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.h b/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.h new file mode 100644 index 0000000..acf8031 --- /dev/null +++ b/QtMyStyleEx/QtExample02/QtStyleEx/mystyle.h @@ -0,0 +1,47 @@ +/* + * + * Gmail: touwoyimuli@gmai.com + * blogs: https://blog.csdn.net/qq_33154343 + * + * ------------------------------------------------- + * Copyright 2019~2020 touwoyimuli + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MYSTYLE_H +#define MYSTYLE_H + +#include + +class MyStyle : public QCommonStyle +{ +public: + MyStyle(); + + // QStyle interface +public: + virtual void polish(QWidget *widget) override; + virtual void unpolish(QWidget *widget) override; + virtual void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override; + virtual void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override; + virtual QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override; + virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const override; + virtual QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override; + virtual int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override; + virtual QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const override; + virtual int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override; + +}; + +#endif // MYSTYLE_H diff --git a/QtMyStyleEx/QtExample02/QtStyleEx/widget.cpp b/QtMyStyleEx/QtExample02/QtStyleEx/widget.cpp index 79f3249..57b1e25 100644 --- a/QtMyStyleEx/QtExample02/QtStyleEx/widget.cpp +++ b/QtMyStyleEx/QtExample02/QtStyleEx/widget.cpp @@ -20,6 +20,7 @@ */ #include "widget.h" +#include "mystyle.h" #include #include @@ -74,7 +75,9 @@ void Widget::init() int i = 0; QStringList listStyle = QStyleFactory::keys(); - foreach(QString val, listStyle) { //打印当前系统支持的系统风格 + + //显示 and 使用当前系统支持的系统风格 + foreach(QString val, listStyle) { qDebug()<move(this->rect().right() - 100, this->rect().top() + i++ * 40); @@ -83,4 +86,11 @@ void Widget::init() }); } + //若是自定义风格, new 为对象即可 + QPushButton *btn = new QPushButton("My Style", this); + btn->move(this->rect().right() - 100, this->rect().top() + i++ * 40); + connect(btn, &QPushButton::clicked, this, [=](){ + qApp->setStyle(new MyStyle()); + }); + }