diff options
Diffstat (limited to 'src/widgets/styles')
-rw-r--r-- | src/widgets/styles/qproxystyle.cpp | 7 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.cpp | 24 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.h | 6 | ||||
-rw-r--r-- | src/widgets/styles/qstyle_p.h | 1 | ||||
-rw-r--r-- | src/widgets/styles/qstylefactory.cpp | 4 |
5 files changed, 41 insertions, 1 deletions
diff --git a/src/widgets/styles/qproxystyle.cpp b/src/widgets/styles/qproxystyle.cpp index ecad637957..31fe587ce2 100644 --- a/src/widgets/styles/qproxystyle.cpp +++ b/src/widgets/styles/qproxystyle.cpp @@ -72,6 +72,13 @@ QT_BEGIN_NAMESPACE or system controlled styles. It would not work on a Mac, for example, where menus are handled by the operating system. + When a proxy style should be set on a specific widget only, you have + to make sure to not set the proxy on the global application style which + is returned by QWidget::style(). You have to create a separate custom style + for the widget similar to: + + \snippet code/src_gui_qproxystyle.cpp 2 + \sa QStyle */ diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index 239d873649..9f49a55386 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -422,6 +422,30 @@ QStyle::~QStyle() } /*! + Returns the name of the style. + + This value can be used to create a style with QStyleFactory::create(). + + \sa QStyleFactory::create() + \since 6.1 +*/ +QString QStyle::name() const +{ + Q_D(const QStyle); + return d->name; +} + +/*! + \internal + Set the style name +*/ +void QStyle::setName(const QString &name) +{ + Q_D(QStyle); + d->name = name; +} + +/*! Initializes the appearance of the given \a widget. This function is called for every widget at some point after it diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h index 0e3495306c..ec13fdb80d 100644 --- a/src/widgets/styles/qstyle.h +++ b/src/widgets/styles/qstyle.h @@ -73,6 +73,8 @@ public: QStyle(); virtual ~QStyle(); + QString name() const; + virtual void polish(QWidget *widget); virtual void unpolish(QWidget *widget); @@ -855,12 +857,16 @@ public: const QStyle * proxy() const; private: + void setName(const QString &name); + +private: Q_DISABLE_COPY(QStyle) friend class QWidget; friend class QWidgetPrivate; friend class QApplication; friend class QProxyStyle; friend class QProxyStylePrivate; + friend class QStyleFactory; void setProxy(QStyle *style); }; diff --git a/src/widgets/styles/qstyle_p.h b/src/widgets/styles/qstyle_p.h index 7942cafaf7..ab451d4873 100644 --- a/src/widgets/styles/qstyle_p.h +++ b/src/widgets/styles/qstyle_p.h @@ -72,6 +72,7 @@ public: mutable int layoutSpacingIndex; QStyle *proxyStyle; + QString name; }; inline QImage styleCacheImage(const QSize &size) diff --git a/src/widgets/styles/qstylefactory.cpp b/src/widgets/styles/qstylefactory.cpp index 87a8000ce0..70d08468ca 100644 --- a/src/widgets/styles/qstylefactory.cpp +++ b/src/widgets/styles/qstylefactory.cpp @@ -109,8 +109,10 @@ QStyle *QStyleFactory::create(const QString& key) { } // Keep these here - they make the #ifdefery above work if (!ret) ret = qLoadPlugin<QStyle, QStylePlugin>(loader(), style); - if (ret) + if (ret) { ret->setObjectName(style); + ret->setName(style); + } return ret; } |