Qt クイックコントロールでファイルセレクタを使う

File selectors は、ファイルのバリアントを選択する便利な方法を提供します。Qt は組み込みセレクタとしてプラットフォーム名とロケールを提供します。Qt Quick Controls は、アプリケーションが動作しているスタイルの名前(大文字)で組み込みセレクタを拡張します。

ファイル セレクタを使用することで、スタイルに強く依存することなく、スタイル固有の微調整を適用できます。利用可能なファイルバリアントから、選択されたQMLファイルのみがQMLエンジンによって読み込まれます。各ファイルバリアントはコンテキスト、つまり特定のスタイルを想定することができます。これは一般的にコードの重複を招きますが、その一方で前述のスタイルへのハードな依存性を削減し、よりシンプルで効率的なQMLコードにつながります。

次の例では、マテリアルのスタイルではドロップ シャドウがスタイル化され、他のスタイルではフラットに見える、丸みを帯びたカスタム ボタンを示しています。ファイルは、CustomButton.qml の Material バージョンが+Material サブディレクトリに置かれるように整理されています。

:/main.qml
:/CustomButton.qml
:/+Material/CustomButton.qml

デフォルトでは、main.qmlCustomButton のタイプに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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。