Component QML Type
QML 컴포넌트 정의를 캡슐화합니다. 더 보기...
Import Statement: | import QtQml |
In C++: | QQmlComponent |
속성
첨부된 신호
- completed()
- destruction()
방법
- QtObject createObject(QtObject parent, object properties)
- string errorString()
- object incubateObject(QtObject parent, object properties, enumeration mode)
상세 설명
컴포넌트는 잘 정의된 인터페이스를 가진 재사용 가능한 캡슐화된 QML 유형입니다.
컴포넌트는 종종 컴포넌트 파일, 즉 .qml
파일로 정의됩니다. 컴포넌트 유형은 기본적으로 QML 컴포넌트를 별도의 QML 파일이 아닌 QML 문서 내에서 인라인으로 정의할 수 있게 해줍니다. 이는 QML 파일 내에서 작은 컴포넌트를 재사용하거나 파일 내에서 논리적으로 다른 QML 컴포넌트와 함께 속한 컴포넌트를 정의하는 데 유용할 수 있습니다.
예를 들어, 다음은 여러 개의 Loader 객체에서 사용되는 컴포넌트입니다. 여기에는 단일 항목인 Rectangle 이 포함되어 있습니다:
import QtQuick Item { width: 100; height: 100 Component { id: redSquare Rectangle { color: "red" width: 10 height: 10 } } Loader { sourceComponent: redSquare } Loader { sourceComponent: redSquare; x: 20 } }
Rectangle 자체는 자동으로 렌더링되어 표시되지만, 위의 사각형은 Component
안에 정의되어 있기 때문에 그렇지 않습니다. 컴포넌트는 마치 별도의 QML 파일에 정의된 것처럼 그 안에 있는 QML 유형을 캡슐화하며 요청(이 경우 두 개의 Loader 객체)이 있을 때까지 로드되지 않습니다. Component는 Item에서 파생된 것이 아니므로 여기에 아무 것도 앵커링할 수 없습니다.
Component
정의는 QML 문서 정의와 유사합니다. QML 문서에는 해당 컴포넌트의 동작과 속성을 정의하는 단일 최상위 항목이 있으며, 해당 최상위 항목 외부의 속성이나 동작을 정의할 수 없습니다. 같은 방식으로 Component
정의에는 단일 최상위 항목(위의 예에서는 Rectangle)이 포함되며, 이 항목 외부의 데이터는 id (위의 예에서는 redSquare)를 제외하고는 정의할 수 없습니다.
Component
유형은 일반적으로 뷰에 그래픽 컴포넌트를 제공하는 데 사용됩니다. 예를 들어 ListView::delegate 속성은 각 목록 항목이 표시되는 방식을 지정하기 위해 Component
이 필요합니다.
Component
Qt.createComponent ()를 사용하여 개체를 동적으로 만들 수도 있습니다.
생성 컨텍스트
컴포넌트의 생성 컨텍스트는 컴포넌트가 선언된 컨텍스트에 해당합니다. 이 컨텍스트는 컴포넌트가 ListView 또는 로더와 같은 객체에 의해 인스턴스화될 때 부모 컨텍스트로 사용됩니다( 컨텍스트 계층 구조 생성).
다음 예제에서 comp1
은 MyItem.qml 의 루트 컨텍스트 내에서 생성되며, 이 컴포넌트에서 인스턴스화된 모든 객체는 해당 컨텍스트 내의 ID 및 속성(예: internalSettings.color
)에 액세스할 수 있습니다. comp1
이 다른 컨텍스트에서 ListView 델리게이트로 사용되는 경우(아래 main.qml에서와 같이), 생성 컨텍스트의 속성에 계속 액세스할 수 있습니다(그렇지 않으면 외부 사용자에게는 비공개가 됨).
MyItem.qml | |
main.qml | ListView { width: 400; height: 400 model: 5 delegate: myItem.mycomponent //will create green Rectangles MyItem { id: myItem } } |
생성 컨텍스트의 수명이 생성된 모든 객체보다 오래 지속되는 것이 중요합니다. 자세한 내용은 동적으로 생성된 객체 관리하기를 참조하세요.
속성 문서
progress : real |
0.0(아무것도 로드되지 않음)에서 1.0(완료)까지의 컴포넌트 로딩 진행률입니다.
status : enumeration |
이 프로퍼티에는 컴포넌트 로딩 상태가 저장됩니다. 상태는 다음 중 하나일 수 있습니다:
Constant | 설명 |
---|---|
Component.Null | 컴포넌트에 사용할 수 있는 데이터가 없음 |
Component.Ready | 컴포넌트가 로드되었으며 인스턴스 생성에 사용할 수 있습니다. |
Component.Loading | 컴포넌트가 현재 로드 중입니다. |
Component.Error | 컴포넌트를 로드하는 동안 오류가 발생했습니다. errorString ()를 호출하면 사람이 읽을 수 있는 오류에 대한 설명이 제공됩니다. |
url : url |
컴포넌트 URL. 컴포넌트를 구성하는 데 사용된 URL입니다.
첨부된 신호 문서
completed() |
객체가 인스턴스화된 후에 발생합니다. 전체 QML 환경이 설정된 후 시작 시 스크립트 코드를 실행하는 데 사용할 수 있습니다.
onCompleted
시그널 핸들러는 모든 객체에 선언할 수 있습니다. 핸들러 실행 순서는 정의되지 않습니다.
Rectangle { Component.onCompleted: console.log("Completed Running!") Rectangle { Component.onCompleted: console.log("Nested Completed Running!") } }
참고: 해당 핸들러는 onCompleted
입니다.
destruction() |
개체가 소멸을 시작할 때 발생합니다. 이는 completed() 신호 또는 애플리케이션의 다른 명령형 코드에 대한 응답으로 수행된 작업을 취소하는 데 사용할 수 있습니다.
onDestruction
신호 핸들러는 모든 객체에 선언할 수 있습니다. 핸들러를 실행하는 순서는 정의되지 않습니다.
Rectangle { Component.onDestruction: console.log("Destruction Beginning!") Rectangle { Component.onDestruction: console.log("Nested Destruction Beginning!") } }
참고: 해당 핸들러는 onDestruction
입니다.
또한 Qt Qml.
메서드 문서
주어진 parent 및 properties 을 갖는 이 컴포넌트의 객체 인스턴스를 생성하고 반환합니다. properties 인수는 선택 사항입니다. 객체 생성에 실패하면 null을 반환합니다.
객체는 컴포넌트가 생성된 컨텍스트와 동일한 컨텍스트에서 생성됩니다. 이 함수는 QML로 생성되지 않은 컴포넌트에서 호출하면 항상 null을 반환합니다.
부모를 설정하지 않고 객체를 생성하려면 parent 값에 null
을 지정하세요. 반환된 객체를 표시하려면 유효한 parent 값을 제공하거나 반환된 객체의 parent 속성을 설정해야 하며, 그렇지 않으면 객체가 표시되지 않습니다.
createObject()에 parent 을 제공하지 않으면 가비지 수집기에 의해 삭제되지 않도록 반환된 객체에 대한 참조를 보유해야 합니다. 이는 나중에 Item::parent 을 설정했는지 여부와 관계없이 해당되며, 아이템 부모를 설정해도 객체 소유권은 변경되지 않습니다. 그래픽 부모만 변경됩니다.
QtQuick 1.1
에서 이 메서드는 생성된 객체의 초기 속성 값 맵을 지정하는 선택적 properties 인수를 허용합니다. 이 값은 객체 생성이 완료되기 전에 적용됩니다. 이는 객체를 생성한 후에 속성 값을 설정하는 것보다 효율적이며, 특히 대량의 속성 값 집합이 정의된 경우 객체가 생성되기 전에 속성 바인딩을 설정( Qt.binding)할 수 있습니다.
properties 인수는 속성 값 항목의 맵으로 지정됩니다. 예를 들어 아래 코드는 초기값이 각각 100과 100인 x
및 y
개체를 만듭니다:
const component = Qt.createComponent("Button.qml"); if (component.status === Component.Ready) { component.createObject(parent, { x: 100, y: 100 }); }
동적으로 생성된 인스턴스는 destroy()
메서드를 사용하여 삭제할 수 있습니다. 자세한 내용은 자바스크립트에서 동적 QML 객체 생성을 참조하세요.
incubateObject()도 참조하세요 .
string errorString() |
사람이 읽을 수 있는 오류 설명을 반환합니다.
이 문자열에는 각 오류의 파일, 위치 및 설명이 포함됩니다. 오류가 여러 개 있는 경우 개행 문자로 구분됩니다.
오류가 없으면 빈 문자열이 반환됩니다.
object incubateObject(QtObject parent, object properties, enumeration mode) |
이 컴포넌트의 인스턴스에 대한 인큐베이터를 생성합니다. 인큐베이터를 사용하면 새 컴포넌트 인스턴스를 비동기적으로 인스턴스화할 수 있으며 UI가 멈추지 않습니다.
parent 인수는 생성된 인스턴스가 가질 부모를 지정합니다. 매개변수를 생략하거나 null을 전달하면 부모가 없는 객체가 생성됩니다. 이 경우 생성된 객체가 가비지 수집기에 의해 소멸되지 않도록 객체에 대한 참조를 보유해야 합니다.
properties 인자는 생성된 객체가 생성되는 동안 설정될 속성 값 항목의 맵으로 지정됩니다. mode 은 Qt.Synchronous 또는 Qt.Asynchronous일 수 있으며 인스턴스가 동기 또는 비동기적으로 생성되는지 여부를 제어합니다. 기본값은 비동기입니다. 경우에 따라 Qt.Synchronous가 지정되어 있더라도 인큐베이터가 객체를 비동기적으로 생성할 수 있습니다. 이는 incubateObject()를 호출하는 컴포넌트 자체가 비동기적으로 생성되는 경우 발생합니다.
세 개의 인수는 모두 선택 사항입니다.
성공하면 메서드는 인큐베이터를 반환하고, 그렇지 않으면 null을 반환합니다. 인큐베이터에는 다음과 같은 속성이 있습니다:
status
- 인큐베이터의 상태. 유효한 값은 Component.Ready, Component.Loading 및 Component.Error입니다.object
- 생성된 객체 인스턴스. 인큐베이터가 준비 상태일 때만 사용할 수 있습니다.onStatusChanged
- 상태가 변경될 때 호출할 콜백 함수를 지정합니다. 상태는 콜백에 매개변수로 전달됩니다.forceCompletion()
- 인큐베이션을 동기적으로 완료하려면 호출합니다.
다음 예는 인큐베이터를 사용하는 방법을 보여줍니다:
const component = Qt.createComponent("Button.qml"); const incubator = component.incubateObject(parent, { x: 10, y: 10 }); if (incubator.status !== Component.Ready) { incubator.onStatusChanged = function(status) { if (status === Component.Ready) { print("Object", incubator.object, "is now ready!"); } }; } else { print("Object", incubator.object, "is ready immediately!"); }
동적으로 생성된 인스턴스는 destroy()
메서드를 사용하여 삭제할 수 있습니다. 자세한 내용은 자바스크립트에서 동적 QML 객체 생성을 참조하세요.
createObject()도 참조하세요 .
© 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.