このページについて

Qt Quick コントロールの変更点

Qt 6は、フレームワークの効率性と使いやすさを向上させるという意図的な取り組みの成果です。

各リリースにおいて、すべての公開 API との互換性を維持するよう努めています。Qt をより優れたフレームワークにするための取り組みにおいて、一部の変更は避けられませんでした。

このトピックでは、Qt Quick コントロールにおけるそれらの変更点をまとめ、それらに対処するための指針を提供します。

Qt Quick Controls 1 からの移行

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

型登録の変更

Qt Quick Qt 6 では、Controls に大規模な変更が加えられましたが、その大部分は内部的なものです。Qt 5.15 で導入された改良された型登録機能を活用することで、モジュールの QML ファイルを C++ にコンパイルするための基盤を整え、ツールの効率化を実現しています。 特に、Qt Creator のQMLコードモデルは、型に関するより完全な情報を把握できるようになり、Qt Quick のControlsコードに対するコード補完やエラーチェックの信頼性が向上するはずです。qmllintやqmlformatのような静的解析ツールも、C++でコンパイル時に宣言されるようになった型を認識できるようになることで恩恵を受けます。

これらの変更に伴い、一部の処理が以前とは若干異なる方法で行われるようになりました。

カスタムスタイルは、正式なQMLモジュールになりました

コンパイル時の型登録を可能にするため、各「Qt Quick 」コントロールスタイルは、正式な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 サブディレクトリを追加し、その中に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 コントロールでのファイルセレクターの使用。

デフォルトのスタイル

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

したがって、Qt 5 でスタイルを指定しておらず、カスタマイズされたコントロールを使用しているアプリケーションは、それらのコントロールの外観や動作を Qt 5 と同様にするために、Qt 6 では明示的に「Basic」スタイルを指定する必要があります。

パレット

パレット API は、QQuickItem に移動されました。Qt Quick Controls でパレットを使用する各種 API に変更はありません。

コントロール

ApplicationWindow への変更

非推奨となっていたオーバーレイプロパティおよび attached API は削除されました。代わりに、Overlay の attached タイプを使用してください。

ComboBoxの変更点

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

Containerの変更点

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

Dialogの変更点

Dialogの `accepted()` および `rejected()` シグナルは、`done()`、`accept()`、および `reject()` を呼び出す際、`closed()` の前に発火されるようになりました。

メニューの変更

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

ToolTipの変更

ToolTipのタイムアウトは、opened() が発行された後にのみ開始されるようになりました。これにより、enter トランジションを持つツールチップは、timeout プロパティで指定された期間全体にわたって表示されるようになります。つまり、以前よりもわずかに長く表示されることになるため、アプリケーション内のツールチップを視覚的に確認し、必要に応じてタイムアウトを調整することをお勧めします。

StackViewの変更点

StackView の.Transition列挙型値は非推奨となりました。任意の操作に対してデフォルトの遷移を使用するには、operation引数を省略できます。

Tumblerの変更点

implicitWidth また、Tumbler のcontentItem では、implicitHeight を必ず指定する必要があります。これにより、他のすべてのコントロールとの整合性が保たれます。

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