Qtスタイルシート
Qtスタイルシートを使用すると、QStyle をサブクラス化することで可能なことに加え、テキスト形式のルールを用いてウィジェットの外観をカスタマイズすることができます。Qtスタイルシートの概念、用語、および構文は、HTMLのカスケードスタイルシート(CSS)に大きく影響を受けていますが、ウィジェットの世界に適応されています。
スタイルシートは、プロトタイピングや小規模で局所的な調整を行うためのツールです。アプリケーションの完成版の外観を決定する際には、QStyle を実装するか、StyleKitを使用してください。「Qt Widgets におけるスタイリングのアプローチ」では、スタイルシートに伴うコストについて解説し、各アプローチを比較しています。
トピック:
注: QWidget::setFont() やQTreeWidgetItem::setBackground() といった、ウィジェットの外観を設定する関数と同じウィジェットで Qt スタイルシートを使用する場合、 設定が競合すると、スタイルシートが優先されます。
概要
スタイルシートは、QApplication::setStyleSheet() を使用してアプリケーション全体に、あるいはQWidget::setStyleSheet() を使用して特定のウィジェット(およびその子ウィジェット)に設定できるテキスト形式の仕様です。異なるレベルで複数のスタイルシートが設定されている場合、Qt は設定されているすべてのスタイルシートから有効なスタイルシートを導出します。これは「カスケード」と呼ばれます。
アプリケーションのスタイルシートは、最初のウィンドウが表示される前に一度だけ設定してください。実行時にスタイルシートを変更すると、以前のスタイルシートの一部のみが新しいスタイルシートによって上書きされるなど、結果に一貫性がなくなる可能性があります。実行時にテーマを切り替えるためにこの関数を使用しないでください。
たとえば、次のスタイルシートでは、すべてのQLineEditの背景色を黄色に、すべてのQCheckBoxの文字色を赤に指定しています:
この種のカスタマイズに関しては、スタイルシートの方がQPalette よりもはるかに強力です。たとえば、QPushButton のQPalette::Button ロールを赤に設定して、赤いプッシュボタンを表示させようと思うかもしれません。しかし、スタイルの作成者は各プラットフォームのガイドラインや(WindowsおよびmacOSでは)ネイティブなテーマエンジンによる制約を受けるため、これがすべてのスタイルで確実に機能するとは限りません。
スタイルシートを使用すれば、QPalette だけでは実現が困難、あるいは不可能なあらゆる種類のカスタマイズを行うことができます。必須フィールドの背景を黄色にしたり、誤操作によるデータ損失の恐れがあるプッシュボタンのテキストを赤くしたり、凝ったチェックボックスを作成したりしたい場合は、スタイルシートが解決策となります。
スタイルシートは、現在のwidget style の上に適用されます。つまり、アプリケーションは可能な限りネイティブな外観を保ちつつ、スタイルシートによる制約も考慮されることになります。パレットをいじるのとは異なり、スタイルシートには確実性があります。例えば、QPushButton の背景色を赤に設定すれば、すべてのスタイル、すべてのプラットフォームにおいて、そのボタンの背景が確実に赤になることが保証されます。 さらに、Qt Widgets Designer にはスタイルシートの統合機能が備わっており、さまざまなwidget styles でスタイルシートの効果を簡単に確認することができます。
スタイルシートを使用すれば、QStyle をサブクラス化することなく、例えばラジオボタンやチェックボックス用の画像を指定することで、プロトタイプに独特の外観を与えることもできます。
スタイルシートがアクティブな場合、QWidget::style() によって返されるQStyle は、プラットフォーム固有のスタイルではなく、ラッパー「スタイルシート」スタイルになります。 このラッパー・スタイルは、アクティブなスタイルシートが確実に反映されるようにするとともに、それ以外の場合は描画操作を基盤となるプラットフォーム固有のスタイル(たとえば、Windows では `windows11 ` スタイル、macOS では `macos ` スタイルなど。QStyleFactory を参照)に転送します。
セキュリティに関する考慮事項
スタイルシートのテキストは Qt によって解析され、外部リソースを参照することができます。url() 関数は、任意のローカルファイルや Qt リソースを指定することができ、Qt はそれを読み込んで、背景、境界線、アイコン画像などとしてレンダリングします。 実行時に選択可能なテーマファイル、-stylesheet コマンドラインオプションで指定されたパス、プラグインからのコンテンツなど、完全に自身の制御下にはないデータからスタイルシートの一部または全部を構築するアプリケーションは、そのコンテンツを、信頼できないソースからの他のファイルパスと同様に扱う必要があります。 悪意のあるスタイルシートにより、Qt が、アプリケーションプロセスがアクセス権限を持つ任意のローカルファイルの内容を読み取り、表示してしまう可能性があります。
アプリケーションにハードコードされているスタイルシート、あるいはコンパイル済みの Qt リソースファイルに埋め込まれているスタイルシートは、その内容がアプリケーション自体によって完全に制御されているため、この問題の影響を受けません。
© 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.