QStyle: add name() to return the name of the style
Currently there is no way to get the name of the current style to e.g. create a QProxyStyle for a specific widget only. Therefore add QStyle::name() so QProxyStyle(const QString &) can be called without hard-coding the style name. Remove an unused doc snippet as drive-by. Fixes: QTBUG-8004 Change-Id: I466c5e870a5392b238365bdc930f6a2ecee50cdb Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
parent
47c6b5b91e
commit
1bcfada9f0
@ -48,22 +48,6 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class MyProxyStyle : public QProxyStyle
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
int styleHint(StyleHint hint, const QStyleOption *option = nullptr,
|
|
||||||
const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override
|
|
||||||
{
|
|
||||||
if (hint == QStyle::SH_UnderlineShortcut)
|
|
||||||
return 1;
|
|
||||||
return QProxyStyle::styleHint(hint, option, widget, returnData);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
#include "textedit.h"
|
#include "textedit.h"
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
@ -93,3 +77,11 @@ int main(int argc, char **argv)
|
|||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
...
|
||||||
|
auto proxy = new MyProxyStyle(QApplication::style()->name());
|
||||||
|
proxy->setParent(widget); // take ownership to avoid memleak
|
||||||
|
widget->setStyle(proxy);
|
||||||
|
...
|
||||||
|
//! [2]
|
||||||
|
@ -72,6 +72,13 @@ QT_BEGIN_NAMESPACE
|
|||||||
or system controlled styles. It would not work on a Mac, for
|
or system controlled styles. It would not work on a Mac, for
|
||||||
example, where menus are handled by the operating system.
|
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
|
\sa QStyle
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -421,6 +421,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.
|
Initializes the appearance of the given \a widget.
|
||||||
|
|
||||||
|
@ -73,6 +73,8 @@ public:
|
|||||||
QStyle();
|
QStyle();
|
||||||
virtual ~QStyle();
|
virtual ~QStyle();
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
|
||||||
virtual void polish(QWidget *widget);
|
virtual void polish(QWidget *widget);
|
||||||
virtual void unpolish(QWidget *widget);
|
virtual void unpolish(QWidget *widget);
|
||||||
|
|
||||||
@ -854,6 +856,9 @@ public:
|
|||||||
|
|
||||||
const QStyle * proxy() const;
|
const QStyle * proxy() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setName(const QString &name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(QStyle)
|
Q_DISABLE_COPY(QStyle)
|
||||||
friend class QWidget;
|
friend class QWidget;
|
||||||
@ -861,6 +866,7 @@ private:
|
|||||||
friend class QApplication;
|
friend class QApplication;
|
||||||
friend class QProxyStyle;
|
friend class QProxyStyle;
|
||||||
friend class QProxyStylePrivate;
|
friend class QProxyStylePrivate;
|
||||||
|
friend class QStyleFactory;
|
||||||
void setProxy(QStyle *style);
|
void setProxy(QStyle *style);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,6 +72,7 @@ public:
|
|||||||
|
|
||||||
mutable int layoutSpacingIndex;
|
mutable int layoutSpacingIndex;
|
||||||
QStyle *proxyStyle;
|
QStyle *proxyStyle;
|
||||||
|
QString name;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline QImage styleCacheImage(const QSize &size)
|
inline QImage styleCacheImage(const QSize &size)
|
||||||
|
@ -109,8 +109,10 @@ QStyle *QStyleFactory::create(const QString& key)
|
|||||||
{ } // Keep these here - they make the #ifdefery above work
|
{ } // Keep these here - they make the #ifdefery above work
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = qLoadPlugin<QStyle, QStylePlugin>(loader(), style);
|
ret = qLoadPlugin<QStyle, QStylePlugin>(loader(), style);
|
||||||
if (ret)
|
if (ret) {
|
||||||
ret->setObjectName(style);
|
ret->setObjectName(style);
|
||||||
|
ret->setName(style);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user