変更点Qt Quick Controls

Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。

私たちは各リリースにおいて、すべてのパブリック API の互換性を維持しようと努めています。Qt をより良いフレームワークにするために避けられない変更もあります。

このトピックでは、Qt Quick Controls におけるそれらの変更点を要約し、それらに対処するためのガイダンスを提供します。

Qt Quick Controls からの移行 1

Qt Quick Controls 1 は Qt 5.11 で非推奨となり、Qt 6.0 から削除されました。代わりに (以前は 2 と呼ばれていました) を使用してください。詳細については、Qt 5 ドキュメントのQt Quick Controls Qt Quick Controls Qt 5.15: vs 1Qt Quick Controls Qt Quick Controls を参照してください。

型登録の変更

Qt Quick Controls Qt 6 では、いくつかの大きな、主に内部的な変更が行われました。Qt 5.15 で導入された改良された型登録を利用することで、モジュールの QML ファイルを C++ にコンパイルするための道が開かれ、より効果的なツール作成が可能になりました。特に、 の QML コードモデルは、より完全な型情報を持ち、 コードの補完とエラーチェックの信頼性を高めます。qmllintやqmlformatのような静的解析ツールも、C++のコンパイル時に宣言されるようになった型を認識できるようになるというメリットがあります。Qt Creator Qt Quick Controls

これらの変更の結果、いくつかのことが少し変わっています。

カスタムスタイルが適切なQMLモジュールに

コンパイル時の型登録を可能にするため、Qt Quick Controls の各スタイルが適切なQMLモジュールになりました。以前は、Button.qml ひとつで独自のスタイルを作成することができました。便利な反面、これには非標準のAPIが必要で、Qt Designer のようなツールで対応する必要がありました。

現在では、スタイルが実装するすべてのQML型は、そのスタイルのqmldirファイルで宣言する必要があります:

module MyStyle
Button 1.0 Button.qml

これをQMLの世界の他の部分と統一することで、スタイルは開発者にとってより身近なものになり、初心者にとっても理解しやすくなることが期待されます。その結果、以下のAPIが削除されました:

  • QQuickStyle::addStylePath()
  • QQuickStyle::availableStyles()
  • QQuickStyle::path()
  • QQuickStyle::stylePathList()
  • qt_quick_controls_style_path

他のQMLモジュールと同様に、QMLエンジンのインポートパスでスタイルを見つける必要があるため、このAPIをサポートする必要はなくなりました。

スタイル名

さらに、スタイル名の大文字と小文字を区別する有効な形式が1つだけになりました:"Material"、"MyStyle "などです。つまり、スタイル名はQMLモジュール名と完全に一致しなければなりません。これはファイルセレクタにも適用され、以前はすべてのスタイル名が小文字でした。例えば、Qt 5のプロジェクトでは以下のような構成が有効でした:

MyProject
├── main.qml
├── HomePage.qml
└── +material
    └───HomePage.qml

Qt 6 では、+material+Material になります:

MyProject
├── main.qml
├── HomePage.qml
└── +Material
    └───HomePage.qml

特定のスタイルでアプリケーションを実行する既存の方法はすべてサポートされています。

ランタイムとコンパイル時のスタイル選択

インポートが内部的に機能するようになったため、スタイルのインポートに特別な意味が加わりました。以前は、QtQuick.Controls をインポートすると、現在のスタイルのコントロール タイプがQMLエンジンに登録されていました:

import QtQuick.Controls

これは、実行時にスタイルが選択されるため、実行時のスタイル選択と呼んでいます。

QtQuick.Controls.Material を明示的にインポートすると、そのスタイルが提供する追加 API(たとえば、付属の Material タイプなど)が公開されます:

import QtQuick.Controls.Material

現在、スタイルを明示的にインポートすると、その両方が実行されます。

これは、最後にインポートされたスタイルのコントロール タイプ(Button など)が使用されることを意味します。これをコンパイル時のスタイル選択と呼びます。

これは既存のコードに影響を与えます。つまり、アプリケーションが複数のスタイルをサポートしている場合、これらのインポートをファイル選択された独自のQMLファイルに移動します。

例えば、main.qml

import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Controls.Universal

ApplicationWindow {
    width: 600
    height: 400
    visible: true

    Material.theme: darkMode ? Material.Dark : Material.Light
    Universal.theme: darkMode ? Universal.Dark : Universal.Light

    // Child items, etc.
}

共通のコードを "base "コンポーネントに移動することができます:

// MainWindow.qml

import QtQuick.Controls

ApplicationWindow {}

次に、+Material サブディレクトリを追加し、その中にマテリアル固有のコードをMainWindow.qml に追加します:

// +Material/MainWindow.qml

import QtQuick.Controls.Material

ApplicationWindow {
    Material.theme: darkMode ? Material.Dark : Material.Light
}

Universalも同様にします:

// +Universal/MainWindow.qml

import QtQuick.Controls.Universal

ApplicationWindow {
    Universal.theme: darkMode ? Universal.Dark : Universal.Light
}

次に、main.qml

import QtQuick.Controls

MainWindow {
    width: 600
    height: 400
    visible: true

    // Child items, etc.
}

こちらも参照してください: Qt Quick Controls 、ファイルセレクタを使用する

デフォルトスタイル

デフォルトスタイルは、もはやデフォルトスタイルではないため、"Basic" に名前が変更されました。代わりに、デフォルトのスタイルは Qt がビルドされたプラットフォームに基づいて選択されるようになりました:

そのため、Qt 5 でスタイルを指定せず、カスタマイズしたコントロールを使用しているアプリケーションでは、Qt 6 で Basic スタイルを明示的に指定し、それらのコントロールが Qt 5 と同じように見え、動作するようにする必要があります。

パレット

パレット API はQQuickItem に移動しました。Qt Quick Controls のパレットを使用する様々な API は変更されていません。

コントロール

ApplicationWindow に対する変更

非推奨のオーバーレイ プロパティとアタッチ API が削除されました。代わりにOverlay のアタッチ型を使用してください。

コンボボックスに対する変更

pressed プロパティが読み取り専用になりました。ComboBox の視覚的に押された状態を変更するには、代わりにdown プロパティを使用してください。

コンテナに関する変更

非推奨のremoveItem(var) 関数が削除されました。removeItem代わりに (Item) またはtakeItem(int) を使用できます。

ダイアログの変更

Dialog done()、 ()、 () を呼び出すとき、 () と () シグナルが () の前に発行されるようになりました。accept reject accepted rejected closed

Menu に関する変更

非推奨のremoveItem(var) 関数が削除されました。removeItem(Item)またはtakeItem(int)を代わりに使用できます。

ツールチップの変更

ToolTipのタイムアウトは、opened() が発行された後にのみ開始されるようになりました。この結果、エンター遷移を持つツールチップは、タイムアウト・プロパティの全期間表示されるようになりました。これは、以前よりも若干長く表示されることを意味します。そのため、アプリケーションでツールチップを視覚的に確認し、必要に応じてタイムアウトを調整する価値があるかもしれません。

StackViewの変更

StackView.Transition列挙値は非推奨となりました。与えられた操作に対してデフォルトのトランジションを使用するために、operation引数を省略することができます。

Tumblerに対する変更

implicitWidth および は、 's に提供されなければならなくなり、他のすべてのコントロールとの一貫性が保たれるようになりました。implicitHeight Tumbler contentItem

© 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.