변경 사항 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 .15: Qt Quick Controls vs 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.qml

Qt 6에서는 +material+Material 이 됩니다:

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

특정 스타일로 애플리케이션을 실행하는 기존의 모든 방법은 계속 지원됩니다.

런타임 및 컴파일 타임 스타일 선택

이제 스타일을 임포트하는 것은 임포트가 내부적으로 작동하는 방식으로 인해 추가적인 의미를 갖습니다. 이전에는 QtQuick.Controls 을 가져오면 현재 스타일의 컨트롤 유형이 QML 엔진에 등록되었습니다:

import QtQuick.Controls

스타일이 런타임에 선택되기 때문에 이를 런타임 스타일 선택이라고 합니다.

QtQuick.Controls.Material 을 명시적으로 임포트하면 해당 스타일에서 제공하는 추가 API(예: 첨부된 머티리얼 유형)가 노출되기만 하면 됩니다:

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

공통 코드를 "기본" 컴포넌트로 이동할 수 있습니다:

// 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/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 에서 파일 선택기 사용하기.

기본 스타일

기본 스타일은 더 이상 기본 스타일이 아니므로 "기본"으로 이름이 변경되었습니다. 대신 기본 스타일은 이제 Qt가 빌드된 플랫폼에 따라 선택됩니다:

따라서 Qt 5에서 스타일을 지정하지 않았고 사용자 정의 컨트롤이 있는 애플리케이션은 Qt 6에서 기본 스타일을 명시적으로 지정하여 해당 컨트롤이 Qt 5에서와 같은 모양과 동작을 하도록 해야 합니다.

팔레트

팔레트 API가 QQuickItem 로 이전되었습니다. Qt Quick Controls 에서 팔레트를 사용하는 다양한 API는 변경되지 않았습니다.

컨트롤

ApplicationWindow의 변경 사항

더 이상 사용되지 않는 오버레이 속성 및 첨부된 API가 제거되었습니다. 대신 Overlay 첨부 유형을 사용하세요.

ComboBox 변경 사항

pressed 속성은 이제 읽기 전용입니다. ComboBox 의 시각적 눌림 상태를 수정하려면 down 속성을 대신 사용하세요.

컨테이너 변경 사항

더 이상 사용되지 않는 removeItem(var) 함수가 제거되었습니다. removeItem(항목) 또는 takeItem(int)를 대신 사용할 수 있습니다.

대화 상자 변경 사항

Dialogaccepted() 및 rejected() 신호는 이제 done(), accept() 및 reject()를 호출할 때 closed() 전에 출력됩니다.

메뉴 변경 사항

더 이상 사용되지 않는 removeItem(var) 함수가 제거되었습니다. removeItem(항목) 또는 takeItem(int)를 대신 사용할 수 있습니다.

툴팁 변경

ToolTip의 시간 초과가 이제 opened()가 전송된 후에만 시작됩니다. 따라서 입력 전환이 있는 툴팁이 시간 초과 속성의 전체 기간 동안 표시됩니다. 즉, 이전보다 약간 더 오래 표시되므로 애플리케이션에서 툴팁을 눈으로 확인하고 필요한 경우 타임아웃을 조정하는 것이 좋습니다.

스택뷰 변경 사항

StackView.Transition 열거형 값은 더 이상 사용되지 않습니다. 특정 연산에 대해 기본 전환을 사용하려면 연산 인수를 생략할 수 있습니다.

텀블러 변경 사항

implicitWidth 이제 TumblercontentItemimplicitHeight 를 제공해야 다른 모든 컨트롤과 일관성을 유지할 수 있습니다.

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