Qtスタイルシート
Qt スタイルシートは、QStyle をサブクラス化することで既に可能なことに加えて、ウィジェットの外観をカスタマイズできる強力なメカニズムです。Qt スタイルシートの概念、用語、構文は、HTML のCSS (Cascading Style Sheets)に大きくインスパイアされていますが、ウィジェットの世界に適応しています。
トピック
注意: Qt スタイルシートがQWidget::setFont() やQTreeWidgetItem::setBackground() のようなウィジェットの外観を設定する関数と同じウィジェットで使用されている場合、設定が衝突するとスタイルシートが優先されます。
概要
スタイル・シートは、QApplication::setStyleSheet() を使用してアプリケーション全体に、またはQWidget::setStyleSheet() を使用して特定のウィジェット(およびその子)に設定できるテキスト仕様です。複数のスタイル・シートが異なるレベルで設定されている場合、Qt は設定されているすべてのスタイル・シートから有効なスタイル・シートを導き出します。これをカスケーディングと呼びます。
たとえば、次のスタイル・シートは、すべてのQLineEditが背景色として黄色を使用し、すべてのQCheckBoxes がテキスト色として赤を使用することを指定します:
この種のカスタマイズでは、スタイル・シートはQPalette 。例えば、QPushButton 、赤いプッシュ・ボタンを得るために、QPalette::Button の役割を赤に設定したくなるかもしれません。しかし、スタイル作成者は異なるプラットフォームのガイドラインと(WindowsとmacOSでは)ネイティブのテーマ・エンジンによって制限されるため、これはすべてのスタイルで機能する保証はありませんでした。
スタイルシートを使えば、QPalette を使うだけでは難しい、あるいは不可能な、あらゆる種類のカスタマイズを行うことができます。必須フィールドの背景を黄色にしたい、潜在的に破壊的なプッシュ・ボタンのテキストを赤にしたい、派手なチェック・ボックスにしたい、そんなときはスタイル・シートが解決してくれます。
スタイル・シートは、現在のwidget style の上に適用されます。つまり、アプリケーションは可能な限りネイティブに見えますが、スタイル・シートの制約は考慮されます。パレットをいじるのとは異なり、スタイル・シートは保証を提供します:QPushButton の背景色を赤に設定すれば、すべてのスタイルで、すべてのプラットフォームで、ボタンの背景が赤になることが保証されます。さらに、Qt Widgets Designerはスタイル・シートの統合を提供し、異なるwidget styles でスタイル・シートの効果を簡単に見ることができます。
さらに、スタイルシートを使用すると、QStyle をサブクラス化しなくても、アプリケーションに独特のルック&フィールを提供できます。例えば、ラジオボタンやチェックボックスに任意の画像を指定して目立たせることができます。このテクニックを使えば、style hint を指定するなど、通常は複数のスタイル・クラスをサブクラス化する必要があるような細かいカスタマイズも実現できます。
スタイル・シートがアクティブな場合、QWidget::style() によって返されるQStyle は、プラットフォーム固有のスタイルではなく、ラッパー「スタイル・シート」スタイルです。ラッパー・スタイルは、アクティブなスタイル・シートが尊重されることを保証し、それ以外の描画操作は、基礎となるプラットフォーム固有のスタイル(例えば、WindowsのQWindowsVistaStyle)に転送します。
Qt 4.5 以降、Qt スタイルシートは macOS を完全にサポートしています。
© 2025 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.