변경 사항 Qt Quick Controls
Qt 6의 변경 사항은 프레임워크를 더욱 효율적이고 사용하기 쉽게 만들기 위한 의도적인 노력의 결과입니다.
저희는 각 릴리스에서 모든 공개 API에 대한 호환성을 유지하기 위해 노력하고 있습니다. Qt를 더 나은 프레임워크로 만들기 위한 과정에서 일부 변경 사항은 불가피했습니다.
이 항목에서는 Qt Quick Controls 의 변경 사항을 요약하고, 이를 처리하기 위한 지침을 제공합니다.
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 Controls 는 Qt 6에서 주로 내부적인 측면에서 상당한 변경이 이루어졌습니다. Qt 5.15에서 도입된 개선된 유형 등록 기능을 활용함으로써, 모듈의 QML 파일을 C++로 컴파일할 수 있는 기반을 마련하고 툴의 효율성을 높일 수 있게 되었습니다. 특히, Qt Creator 의 QML 코드 모델은 타입에 대한 더 완전한 정보를 갖게 되어, Qt Quick Controls 코드의 자동 완성 및 오류 검사가 더욱 신뢰할 수 있게 될 것입니다. qmllint 및 qmlformat과 같은 정적 분석 도구도 이제 C++에서 컴파일 시점에 선언되는 타입을 인식할 수 있게 되어 이점을 얻게 됩니다.
이러한 변경 사항의 결과로, 일부 작업 방식이 약간 달라졌습니다.
사용자 정의 스타일은 이제 정식 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를 더 이상 지원할 필요도 없고 지원할 수도 없습니다.
스타일 이름
또한, 이제 스타일 이름에 대해 대소문자를 구분하는 유효한 형식은 "Material", "MyStyle" 등과 같이 단 하나뿐입니다. 즉, 스타일 이름은 QML 모듈의 이름과 정확히 일치해야 합니다. 이는 파일 선택기에도 적용되며, 이전에는 모든 스타일 이름이 소문자로 표기되었습니다. 예를 들어, 다음은 Qt 5 프로젝트에서 유효한 구조였습니다:
MyProject
├── main.qml
├── HomePage.qml
└── +material
└───HomePage.qmlQt 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 전용 코드를 추가하세요:
// +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 에서 파일 선택기 사용하기.
기본 스타일
'Default' 스타일은 더 이상 기본 스타일이 아니므로 "Basic"으로 이름이 변경되었습니다. 대신, 기본 스타일은 이제 Qt가 빌드된 플랫폼에 따라 선택됩니다:
- Android: Material 스타일
- Linux: Fusion 스타일
- macOS: macOS 스타일
- Windows: Windows 스타일
- 그 외 모든 플랫폼: Basic 스타일
따라서 Qt 5에서 스타일을 지정하지 않았고 사용자 정의 컨트롤을 사용하는 애플리케이션은, 해당 컨트롤이 Qt 5에서와 동일한 모양과 동작을 유지하도록 Qt 6에서 ‘기본’ 스타일을 명시적으로 지정해야 합니다.
팔레트
팔레트 API는 QQuickItem 로 이동되었습니다. Qt Quick Controls 에서 팔레트를 사용하는 다양한 API는 변경되지 않았습니다.
컨트롤
ApplicationWindow의 변경 사항
사용 중단된 overlay 속성과 attached API가 제거되었습니다. 대신 Overlay 의 attached 타입을 사용하십시오.
ComboBox의 변경 사항
pressed 속성은 이제 읽기 전용입니다. ComboBox 의 시각적 누름 상태를 수정하려면 대신 down 속성을 사용하십시오.
컨테이너의 변경 사항
사용 중단된 ` removeItem(var) ` 함수가 제거되었습니다. 대신 ` removeItem`(Item) 또는 ` takeItem`(int)를 사용할 수 있습니다.
Dialog의 변경 사항
Dialog done(), () 및 ()을 호출할 때, ' ()' 및 ' ()' 신호가 이제 ' ()'보다 먼저 발생합니다. accept reject accepted rejected closed
메뉴 변경 사항
사용 중단된 removeItem(var) 함수가 제거되었습니다. 대신 removeItem(Item) 또는 takeItem(int)를 사용할 수 있습니다.
툴팁 변경 사항
ToolTip의 타임아웃은 이제 opened()이 호출된 후에만 시작됩니다. 이로 인해 'enter' 전환 효과를 사용하는 툴팁은 타임아웃 속성의 전체 지속 시간 동안 표시됩니다. 즉, 이전보다 툴팁이 약간 더 오래 표시되므로, 애플리케이션의 툴팁을 직접 확인하고 필요한 경우 타임아웃을 조정하는 것이 좋습니다.
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.