このページでは

QProxyStyle Class

QProxyStyle クラスは、QStyle 要素の動的な上書きを簡略化する便利なクラスです。詳細...

ヘッダー: #include <QProxyStyle>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承元: QCommonStyle

パブリック関数

QProxyStyle(QStyle *style = nullptr)
QProxyStyle(const QString &key)
virtual ~QProxyStyle()
QStyle *baseStyle() const
void setBaseStyle(QStyle *style)

再実装されたパブリック関数

virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override
virtual void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override
virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override
virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const override
virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override
virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const override
virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual void polish(QApplication *app) override
virtual void polish(QPalette &pal) override
virtual void polish(QWidget *widget) override
virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override
virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
virtual QPalette standardPalette() const override
virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const override
virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override
virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *option, QStyle::SubControl sc, const QWidget *widget) const override
virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override
virtual void unpolish(QApplication *app) override
virtual void unpolish(QWidget *widget) override

再実装されたプロテクトされた関数

virtual bool event(QEvent *e) override

詳細な説明

QProxyStyleは、描画やその他の特定のスタイル動作を動的に上書きする目的で、QStyle (通常はデフォルトのシステムスタイル)をラップします。これは、本番アプリケーションでプラットフォームのスタイルを調整するための推奨される方法です。詳細は、「Qt Widgets のスタイル設定手法」を参照してください。

以下の例は、どのプラットフォームでもショートカットのアンダーライン動作をオーバーライドする方法を示しています:

#include "textedit.h"
#include <QApplication>
#include <QProxyStyle>

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 0;
        return QProxyStyle::styleHint(hint, option, widget, returnData);
    }
};

int main(int argc, char **argv)
{
    Q_INIT_RESOURCE(textedit);

    QApplication a(argc, argv);
    a.setStyle(new MyProxyStyle);
    TextEdit mw;
    mw.resize(700, 800);
    mw.show();
    //...
}

警告:Qtが提供するcommon styles はQStyle::proxy()を呼び出すため、このヒントを反映しますが、ユーザー定義またはシステム制御のスタイルにおいてQStyle::proxy()が呼び出される保証はありません。例えば、メニューがオペレーティングシステムによって処理されるmacOSでは機能しません。

プロキシスタイルを特定のウィジェットのみに設定する場合は、QWidget::style() によって返されるグローバルなアプリケーションスタイルに対してプロキシを設定しないように注意する必要があります。次のように、そのウィジェット用に個別のカスタムスタイルを作成する必要があります。

...
auto proxy = new MyProxyStyle(QApplication::style()->name());
proxy->setParent(widget);   // take ownership to avoid memleak
widget->setStyle(proxy);
...

QStyleも参照してください 。

メンバ関数のドキュメント

QProxyStyle::QProxyStyle(QStyle *style = nullptr)

指定されたstyle の挙動を上書きするためのQProxyStyleオブジェクトを生成します。style が指定されていない場合は、デフォルトのネイティブstyle の挙動を上書きします。

style の所有権は QProxyStyle に移管されます。

QProxyStyle::QProxyStyle(const QString &key)

stylekey で指定されたベーススタイル、または指定されたスタイルkey が認識されない場合は現在のapplication style の動作を上書きするための QProxyStyle オブジェクトを作成します。

QStyleFactory::create()も参照してください 。

[virtual noexcept] QProxyStyle::~QProxyStyle()

QProxyStyle オブジェクトを破棄します。

QStyle *QProxyStyle::baseStyle() const

プロキシのベーススタイルオブジェクトを返します。プロキシスタイルにベーススタイルが設定されていない場合、QProxyStyle は代わりにアプリケーションスタイルのインスタンスを作成します。

setBaseStyle() およびQStyleも参照してください 。

[override virtual] void QProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const

QCommonStyle::drawComplexControl (QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget)const を再実装します。

[override virtual] void QProxyStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const

QCommonStyle::drawControl (QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget)const を再実装します。

[override virtual] void QProxyStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const

QStyle::drawItemPixmap (QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap)const の再実装です。

[override virtual] void QProxyStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const

QStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const を再実装します。

[override virtual] void QProxyStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const

QCommonStyle::drawPrimitive (QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget)const を再実装します。

[override virtual protected] bool QProxyStyle::event(QEvent *e)

QObject::event(QEvent *e) を再実装します。

[override virtual] QPixmap QProxyStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const

QCommonStyle::generatedIconPixmap (QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt)const を再実装しています。

[override virtual] QStyle::SubControl QProxyStyle::hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const

QCommonStyle::hitTestComplexControl (QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget)const を再実装します。

[override virtual] QRect QProxyStyle::itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const

QStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const を再実装します。

[override virtual] QRect QProxyStyle::itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const

QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const を再実装します。

[override virtual] int QProxyStyle::layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

QCommonStyle::layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const を再実装します。

このスロットは、レイアウト内で `control1 ` と `control2 ` の間に使用する間隔を決定するために、`layoutSpacing()` によって呼び出されます。`orientation ` は、コントロールが横並びに配置されるか、縦に積み重ねられるかを指定します。`option ` パラメータは、親ウィジェットに関する追加情報を渡すために使用できます。`widget ` パラメータはオプションであり、`option ` が `nullptr` の場合にも使用できます。

デフォルトの実装では -1 を返します。

combinedLayoutSpacing()も参照してください 。

[override virtual] int QProxyStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

QCommonStyle::pixelMetric (QStyle::PixelMetric m, const QStyleOption *opt, const QWidget *widget)const を再実装します。

[override virtual] void QProxyStyle::polish(QApplication *app)

QCommonStyle::polish(QApplication *app) を再実装します。

[override virtual] void QProxyStyle::polish(QPalette &pal)

QCommonStyle::polish (QPalette および pal)を再実装しています。

[override virtual] void QProxyStyle::polish(QWidget *widget)

QCommonStyle::polish(QWidget *widget) を再実装します。

void QProxyStyle::setBaseStyle(QStyle *style)

プロキシされるべき基本スタイルを設定します。

style の所有権はQProxyStyle に移行されます。

style がnullptr の場合、デスクトップに依存するスタイルが自動的に割り当てられます。

baseStyle()も参照してください 。

[override virtual] QSize QProxyStyle::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const

QCommonStyle::sizeFromContents (QStyle::ContentsType contentsType, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget)const を再実装します。

[override virtual] QIcon QProxyStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const

QStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const を再実装します。

指定されたstandardIcon に対応するアイコンを返します。

QStyle のサブクラスで独自のアイコンを提供するには、このスロットを再実装してください。引数 `option ` を使用すると、適切なアイコンを見つけるために必要な追加情報を渡すことができます。引数 `widget ` はオプションですが、アイコンの検索に役立てることもできます。

[override virtual] QPalette QProxyStyle::standardPalette() const

QStyle::standardPalette() const を再実装します。

[override virtual] QPixmap QProxyStyle::standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const

QCommonStyle::standardPixmap (QStyle::StandardPixmap sp, const QStyleOption *option, const QWidget *widget)const を再実装します。

[override virtual] int QProxyStyle::styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const

QCommonStyle::styleHint (QStyle::StyleHint sh, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *hret)const を再実装します。

[override virtual] QRect QProxyStyle::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *option, QStyle::SubControl sc, const QWidget *widget) const

QCommonStyle::subControlRect (QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget)const を再実装します。

[override virtual] QRect QProxyStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const

QCommonStyle::subElementRect (QStyle::SubElement sr, const QStyleOption *opt, const QWidget *widget)const を再実装します。

[override virtual] void QProxyStyle::unpolish(QApplication *app)

QCommonStyle::unpolish(QApplication *application) を再実装しています。

[override virtual] void QProxyStyle::unpolish(QWidget *widget)

QCommonStyle::unpolish(QWidget *widget) を再実装します。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.