Qtスタイルシート

Qt スタイルシートは、QStyle をサブクラス化することで既に可能なことに加えて、ウィジェットの外観をカスタマイズできる強力なメカニズムです。Qt スタイルシートの概念、用語、構文は、HTML のCSS (Cascading Style Sheets)に大きくインスパイアされていますが、ウィジェットの世界に適応しています。

トピック

注意: Qt スタイルシートが、QWidget::setFont() やQTreeWidgetItem::setBackground() のような、ウィジェットの外観を設定する関数と同じウィジェットで使用されている場合、設定が衝突するとスタイルシートが優先されます。

概要

スタイル・シートは、QApplication::setStyleSheet() を使用してアプリケーション全体に、またはQWidget::setStyleSheet() を使用して特定のウィジェット(およびその子)に設定できるテキスト仕様です。複数のスタイル・シートが異なるレベルで設定されている場合、Qt は設定されているすべてのスタイル・シートから有効なスタイル・シートを導き出します。これをカスケーディングと呼びます。

たとえば、次のスタイル・シートは、すべてのQLineEditが背景色として黄色を使用し、すべてのQCheckBoxes がテキスト色として赤を使用することを指定します:

QLineEdit { background: yellow }
QCheckBox { color: red }

この種のカスタマイズでは、スタイル・シートは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 を完全にサポートしています。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権はそれぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。