변경 사항 Qt Quick

Qt 6는 프레임워크를 보다 효율적이고 사용하기 쉽게 만들기 위한 의식적인 노력의 결과입니다.

각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하려고 노력합니다. 하지만 Qt를 더 나은 프레임워크로 만들기 위해 몇 가지 변경이 불가피했습니다.

이 항목에서는 이러한 변경 사항을 Qt Quick 에 요약하고 이를 처리하기 위한 지침을 제공합니다.

Qt Quick QML 타입의 변경 사항

font.weight의 변경된 유형

font.weight 의 유형이 int 으로 변경되었습니다. 사전 정의된 가중치 클래스는 여전히 존재하지만, 이제 임의의 정수를 사용하여 이러한 가중치 클래스와 일치하지 않는 글꼴을 선택할 수 있습니다. 이로써 글꼴 가중치를 임의의 정수로 표현할 수 있었던 C++ API와의 패리티가 보장됩니다.

문자열에서 열거형 값으로의 암시적 변환이 사용된 경우를 제외하고 대부분의 코드는 이 변경의 영향을 받지 않습니다.

font.weight: "Bold"

이 코드는 더 이상 올바르게 구문 분석되지 않으며 아래와 같이 동등한 열거형 값으로 대체해야 합니다.

font.weight: Font.Bold

FontLoader.name은 이제 읽기 전용 속성입니다.

Qt 5에서는 FontLoadername 프로퍼티가 쓰기 가능했으며 설정 시 항목의 소스 프로퍼티를 재정의했습니다. 이로 인해 용도에 대한 혼란이 발생하고 충돌하는 속성에 대한 설정자 간에 경합 조건이 있는 경우 비결정적인 동작이 발생할 수 있었습니다.

즉, 다음과 같은 코드는 더 이상 작동하지 않습니다.

FontLoader {
    id: fontLoader
    name: "Helvetica"
}

Text {
    font.family: fontLoader.name
    text: "Foobar"
}

대신 사용자 정의 속성을 사용하여 글꼴 패밀리 이름을 저장하세요.

property string fontName: "Helvetica"

Text {
    font.family: fontName
    text: "Foobar"
}

OpenGLInfo QML 유형이 제거됨

Qt 5.8에서 OpenGLInfo는 더 이상 사용되지 않으며 Qt 6에서는 제거되었습니다. 대신 GraphicsInfo 을 사용하세요.

셰이더 이펙트가 더 이상 인라인 GLSL 셰이더 스트링을 지원하지 않음

custom materials 에서와 마찬가지로 이펙트는 더 이상 GLSL 셰이더 문자열 형태로 지정되지 않습니다. 대신 셰이더는 qsb 명령줄 도구와 같은 Qt Shader Tools 모듈의 도구에 의해 전처리되어 런타임에 사용되는 그래픽 API(Vulkan, Metal, OpenGL 또는 Direct 3D)에 관계없이 셰이더 에셋을 사용할 수 있습니다. ShaderEffect 항목은 결과 .qsb 파일을 참조할 것으로 예상됩니다.

셰이더이펙트 소스 프로퍼티는 이제 URL입니다.

ShaderEffect 프로퍼티 vertexShaderfragmentShader 는 이제 QByteArray 대신 QUrl 유형이 됩니다. 따라서 동작은 Image.source 와 같은 다른 유사한 프로퍼티와 동일합니다. file 또는 qrc 스키마를 통해 파일을 참조하는 기존 코드는 계속 그대로 작동합니다. 또한 이 변경으로 컴포넌트(.qml 파일) 위치에 상대적인 경로를 사용하여 파일을 참조할 수 있습니다. 따라서 이제 file: 스키마를 지정하는 것은 선택 사항입니다.

Qt Quick C++ API 변경 사항

QQuickItem

QQuickItem의 geometryChanged() 함수가 geometryChange()로 이름이 변경되었습니다.

QQuickWidget의 변경 사항

QQuickWidget 는 시나리오 그래프가 OpenGL로 렌더링될 때만 작동합니다. Vulkan 또는 Metal과 같은 다른 그래픽 API를 사용할 때는 작동하지 않습니다. QQuickWidget 에 의존하는 애플리케이션은 main() 함수에서 QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL) 을 호출하여 OpenGL을 강제로 사용해야 합니다.

QQuick* API 변경 사항

  • 자체 Vulkan, Metal 또는 Direct3D 렌더링 명령 세트를 통합하려는 애플리케이션은 QQuickWindow::beforeRendering() 및 afterRendering() 외에 새로운 QQuickWindow 신호에 유의해야 합니다. 기존의 Qt 5 패턴인 직전 렌더링 또는 후 렌더링에 연결하는 방식은 그 자체만으로는 충분하지 않은 경우가 많으며 beforeRenderPassRecording() 또는 afterRenderPassRecording()와 같은 추가 신호에 연결하여 보완해야 할 가능성이 높습니다.
  • QQuickWindow::beforeRendering() 또는 afterRendering() 신호에 의존하여 자체 OpenGL 렌더링 명령 집합을 실행하는 애플리케이션은 OpenGL 호출 전에는 QQuickWindow::beginExternalCommands(), 호출 후에는 QQuickWindow::endExternalCommands()를 호출해야 합니다. 이렇게 하면 애플리케이션 코드에 의한 상태 변경이 씬 그래프 렌더러의 자체 캐시된 상태와 혼동을 일으키지 않도록 할 수 있습니다. 그러나 Qt 5에서와 마찬가지로 Qt Quick 렌더러에서 사용하지 않는 OpenGL 3.x 또는 4.x 상태를 변경하면 여전히 예기치 않은 문제가 발생할 수 있으므로 애플리케이션은 이러한 신호에 연결된 슬롯이나 람다에서 반환하기 전에 해당 OpenGL 상태를 기본값으로 재설정하는 것이 좋습니다.
  • 기존의 QQuickWindow::setRenderTarget() 오버로드 및 관련 게터는 제거되고 QQuickRenderTarget 을 취하는 새로운 함수로 대체됩니다. 이제 QQuickRenderControl 과 함께 리디렉션 렌더링을 수행하는 애플리케이션은 이 새로운 함수를 사용하여 OpenGL에 연결되지 않은 방식으로 렌더링 대상을 지정해야 합니다.
  • QSGRendererInterface::GraphicsApi 인수를 받는 QQuickWindow::setSceneGraphBackend() 오버로드의 이름이 setGraphicsApi()로 변경되었습니다.
  • QQuickWindow 함수의 setPersistentOpenGLContext 및 isPersistentOpenGLContext는 이제 QQuickWindow::setPersistentGraphics() 및 QQuickWindow::isPersistentGraphics()로 이름이 변경되었습니다.
  • setClearBeforeRendering() 및 clearBeforeRendering()이 QQuickWindow 에서 제거되었습니다. Qt 6에는 컬러 버퍼 지우기를 건너뛰는 옵션이 없습니다. Qt 5에서는 Qt Quick 이 컬러 버퍼에 렌더링된 콘텐츠를 지우는 것을 방지하기 위해 언더레이와 함께 setClearBeforeRendering()을 호출해야 하는 경우가 많았습니다. Qt 6에서는 Qt Quick 의 콘텐츠를 렌더링하기 전에 지운 후 방출되는 beforeRenderPassRecording() 신호에 연결하는 보다 강력한 접근 방식이 있습니다.
  • QQuickWindow::openglContext() 함수가 제거되었습니다. 애플리케이션이 씬 그래프가 렌더링에 OpenGL을 사용하고 있는지 확인하면 QSGRendererInterface::getResource()에서 QOpenGLContext 을 쿼리할 수 있습니다.
  • QQuickWindow::openglContextCreated() 신호가 제거되었습니다.
  • 더 이상 사용되지 않는 QQuickWindow::createTextureFromId() 함수가 제거되었습니다. 대신 QPlatformInterface::QSGOpenGLTexture, QPlatformInterface::QSGVulkanTexture, QPlatformInterface::QSGD3D11Texture 또는 QPlatformInterface::QSGMetalTexture에서 fromNative() 함수를 사용하십시오.
  • QQuickFramebufferObject 클래스는 변경되지 않은 API로 사용할 수 있지만 시나리오그래프가 OpenGL로 렌더링될 때만 작동합니다. 벌칸이나 메탈과 같은 다른 그래픽 API를 사용할 때는 작동하지 않습니다. QQuickFramebufferObject 에 의존하는 애플리케이션은 main() 함수에서 QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL) 을 호출하여 OpenGL을 강제로 사용해야 합니다.
  • QQuickRenderControl API가 약간 변경되었습니다. 이제 grab()이 제거되었으며, 해당되는 경우 QQuickWindow::grabWindow()를 대신 사용합니다. 초기화() 함수는 더 이상 QOpenGLContext 를 받지 않습니다. 이제 애플리케이션은 QQuickRenderControl::beginFrame() 및 QQuickRenderControl::endFrame()를 적절히 호출해야 합니다. 멀티샘플링이 필요한 경우 새로운 함수 QQuickRenderControl::setSamples()를 호출하여 샘플 수를 표시해야 합니다.
  • 기존 네이티브 그래픽 디바이스 또는 컨텍스트 객체와 함께 Qt Quick 렌더링을 수행하려는 애플리케이션은 QQuickRenderControl 에서 더 이상 initialize(QOpenGLContext*) 함수를 제공하지 않으므로 새로운 QQuickWindow::setGraphicsDevice() 함수를 사용해야 합니다.
  • QQuickPaintedItemContext2DFramebuffer 모드로 설정해도 아무런 효과가 없습니다. 모드가 기본 이미지 모드로 설정된 것처럼 작동합니다.
  • 환경 변수 QSG_NO_DEPTH_BUFFER 는 Qt 6.0에서 계속 지원되지만, QQuickGraphicsConfiguration 에서 setDepthBufferFor2D() 를 호출한 다음 QQuickWindow 로 연결하는 것으로 대체하는 것이 좋습니다.

QSG* API 변경 사항

  • QSGMaterialShader 의 인터페이스가 변경되었습니다. 구현은 더 이상 OpenGL에 의존해서는 안 되며, 현재 제거된 updateState()와 같은 함수가 QOpenGLContext 현재로 호출된다고 가정해서는 안 됩니다. 새로운 데이터 지향 인터페이스에서 updateState()는 updateUniformData(), updateSampledImage() 및 updateGraphicsPipelineState()로 대체됩니다. 이제 셰이더는 문자열로 제공되는 GLSL 셰이더 코드 대신 qsb 명령줄 도구와 같은 Qt Shader Tools 모듈의 도구로 전처리되어 런타임에 어떤 그래픽 API(Vulkan, Metal, OpenGL 또는 Direct 3D)를 사용하든 셰이더 에셋을 사용할 수 있게 될 것으로 예상됩니다.
  • QSGEngine이 제거되었습니다. 이 클래스를 사용하는 애플리케이션의 경우, 대신 QQuickRenderControl 을 사용하도록 포팅하는 것이 좋습니다.
  • QSGAbstractRenderer는 더 이상 공개되지 않습니다. 이 클래스의 사용은 QSGEngine과 함께 사용할 때만 의미가 있었으며, 해당 클래스가 제거됨에 따라 QSGAbstractRenderer는 다시 비공개로 전환되었습니다.
  • QSGSimpleMaterial 편의 클래스가 제거되었습니다. 애플리케이션은 대신 개정된 OpenGL 독립적인 QSGMaterial API를 사용해야 합니다.
  • QSGTexture 에 대한 기본 네이티브 텍스처 오브젝트에 액세스하려면 textureId()를 더 이상 사용할 수 없습니다. 대신 QSGTexture::platformInterface()를 QPlatformInterface::QSGOpenGLTexture, QPlatformInterface::QSGVulkanTexture, QPlatformInterface::QSGD3D11Texture 또는 QPlatformInterface::QSGMetalTexture와 함께 사용하세요.
  • 이제 QSGImageNode 의 서브클래스는 setAnisotropyLevel() 및 anisotropyLevel()과 같은 새로운 추가 버추얼을 재정의하는 데 필요합니다.
  • QSGTexture 의 서브클래스는 재설계해야 할 가능성이 높습니다. bind() 또는 updateBindOptions()와 같은 일부 OpenGL 전용 가상 함수는 더 이상 존재하지 않는 반면 comparisonKey()와 같이 구현이 필수인 새로운 가상 함수가 있습니다.

OpenGL 사용 변경 사항 Qt Quick

많은 애플리케이션에는 별다른 문제가 없겠지만, 애플리케이션 개발자는 Qt 6에서 Qt Quick 렌더링에 OpenGL이 더 이상 기본 선택이 아니라는 점에 유의해야 합니다. software 백엔드를 사용하지 않는 한 Qt Quick 애플리케이션은 런타임에 OpenGL, Vulkan, Metal 또는 Direct3D 11을 사용할 수 있습니다. QSG_RHI_BACKEND 환경 변수 또는 QQuickWindow::setSceneGraphBackend() 함수를 통해 명시적으로 요청하지 않으면 Qt Quick 에 의해 플랫폼별 기본값이 선택됩니다.

자세한 내용은 Qt Quick 씬 그래프Qt Quick 씬 그래프 기본 렌더러 페이지를 참조하세요.

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