From 14dab5b2d7cb7b6b32d9672758c0f3b5d4ec3354 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 27 Nov 2012 00:06:14 +0100 Subject: Add QProxyStyle(QString key) constructor for convenience The QStyle implementations are becoming private, so the following slightly verbose pattern seems to be now repeated a lot: new QProxyStyle(QStyleFactory::create("windows")) This change adds an alternative, more convenient constructor for this particular use case: new QProxyStyle("windows") Change-Id: I97ded597a0fd3225a6354ebea0abb367237430af Reviewed-by: Jens Bache-Wiig --- src/widgets/styles/qproxystyle.cpp | 27 +++++++++++++++++++++---- src/widgets/styles/qproxystyle.h | 3 ++- tests/auto/widgets/styles/qstyle/tst_qstyle.cpp | 7 +++++-- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/widgets/styles/qproxystyle.cpp b/src/widgets/styles/qproxystyle.cpp index 66ace0f60b..911223cae2 100644 --- a/src/widgets/styles/qproxystyle.cpp +++ b/src/widgets/styles/qproxystyle.cpp @@ -108,10 +108,9 @@ void QProxyStylePrivate::ensureBaseStyle() const } /*! - Constructs a QProxyStyle object for overriding behavior in \a style - or in the current application \l{QStyle}{style} if \a style is 0 - (default). Normally \a style is 0, because you want to override - behavior in the system style. + Constructs a QProxyStyle object for overriding behavior in the + specified base \a style, or in the current \l{QApplication::style} + {application style} if base \a style is not specified. Ownership of \a style is transferred to QProxyStyle. */ @@ -126,6 +125,26 @@ QProxyStyle::QProxyStyle(QStyle *style) : } } +/*! + Constructs a QProxyStyle object for overriding behavior in + the base style specified by style \a key, or in the current + \l{QApplication::style}{application style} if the specified + style \a key is unrecognized. + + \sa QStyleFactory::create() +*/ +QProxyStyle::QProxyStyle(const QString &key) : + QCommonStyle(*new QProxyStylePrivate()) +{ + Q_D(QProxyStyle); + QStyle *style = QStyleFactory::create(key); + if (style) { + d->baseStyle = style; + style->setProxy(this); + style->setParent(this); // Take ownership + } +} + /*! Destroys the QProxyStyle object. */ diff --git a/src/widgets/styles/qproxystyle.h b/src/widgets/styles/qproxystyle.h index 62a263b520..d1623c745c 100644 --- a/src/widgets/styles/qproxystyle.h +++ b/src/widgets/styles/qproxystyle.h @@ -55,7 +55,8 @@ class Q_WIDGETS_EXPORT QProxyStyle : public QCommonStyle Q_OBJECT public: - QProxyStyle(QStyle *baseStyle = 0); + QProxyStyle(QStyle *style = 0); + QProxyStyle(const QString &key); ~QProxyStyle(); QStyle *baseStyle() const; diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp index cf867194cc..a3670cccc2 100644 --- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp +++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp @@ -234,7 +234,10 @@ void tst_QStyle::testProxyStyle() QVERIFY(proxyStyle->baseStyle()); qApp->setStyle(proxyStyle); - QProxyStyle doubleProxy(new QProxyStyle(QStyleFactory::create("Windows"))); + QProxyStyle* baseStyle = new QProxyStyle("Windows"); + QCOMPARE(baseStyle->baseStyle()->objectName(), style->objectName()); + + QProxyStyle doubleProxy(baseStyle); QVERIFY(testAllFunctions(&doubleProxy)); CustomProxy customStyle; @@ -775,7 +778,7 @@ void tst_QStyle::testDrawingShortcuts() class FrameTestStyle : public QProxyStyle { public: - FrameTestStyle() : QProxyStyle(QStyleFactory::create("Windows")) { } + FrameTestStyle() : QProxyStyle("Windows") { } int styleHint(StyleHint hint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const { if (hint == QStyle::SH_ScrollView_FrameOnlyAroundContents) return 1; -- cgit v1.2.3