Qt クイックコントロールでファイルセレクタを使う
File selectors は、ファイルのバリアントを選択する便利な方法を提供します。Qt は組み込みセレクタとしてプラットフォーム名とロケールを提供します。Qt Quick Controls は、アプリケーションが動作しているスタイルの名前(大文字)で組み込みセレクタを拡張します。
ファイル セレクタを使用することで、スタイルに強く依存することなく、スタイル固有の微調整を適用できます。利用可能なファイルバリアントから、選択されたQMLファイルのみがQMLエンジンによって読み込まれます。各ファイルバリアントはコンテキスト、つまり特定のスタイルを想定することができます。これは一般的にコードの重複を招きますが、その一方で前述のスタイルへのハードな依存性を削減し、よりシンプルで効率的なQMLコードにつながります。
次の例では、マテリアルのスタイルではドロップ シャドウがスタイル化され、他のスタイルではフラットに見える、丸みを帯びたカスタム ボタンを示しています。ファイルは、CustomButton.qml
の Material バージョンが+Material
サブディレクトリに置かれるように整理されています。
:/main.qml :/CustomButton.qml :/+Material/CustomButton.qml
デフォルトでは、main.qml
はCustomButton
のタイプにCustomButton.qml
を使用します。しかし、アプリケーションをマテリアル・スタイルで実行すると、Material
セレクタが存在し、代わりに+Material/CustomButton.qml
バージョンが使用されます。
// main.qml import QtQuick import QtQuick.Controls ApplicationWindow { id: window visible: true CustomButton { text: "Button" anchors.centerIn: parent } }
カスタム ボタンの基本実装は、単純な丸みを帯びたフラット ボタンです。
// CustomButton.qml import QtQuick import QtQuick.Controls Button { id: control background: Rectangle { radius: width / 2 implicitWidth: 36 implicitHeight: 36 color: control.pressed ? "#ccc" : "#eee" } }
カスタム ボタンの Material スタイルの実装では、Material スタイルをインポートし、ダーク テーマを要求して明るいテキストを取得し、背景にドロップ シャドウを作成します。
// +Material/CustomButton.qml import QtQuick import QtQuick.Effects import QtQuick.Controls import QtQuick.Controls.Material Button { id: control Material.theme: Material.Dark background: Rectangle { implicitWidth: 48 implicitHeight: 48 color: Material.accentColor radius: width / 2 layer.enabled: control.enabled layer.effect: MultiEffect { shadowEnabled: true shadowHorizontalOffset: 3 shadowVerticalOffset: 3 shadowColor: Material.dropShadowColor shadowBlur: control.pressed ? 0.8 : 0.4 } } }
注: 内部でQQmlFileSelector インスタンスを作成するQQmlApplicationEngine を使用することをお勧めします。これだけでQMLファイルセレクタを利用することができます。
関連情報
©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。