2011-11-25 4 views
3

Target.qml이라는 사용자 정의 QML 객체가 있습니다. Qt.createQmlObject()을 사용하여이 객체의 동적 인스턴스를 만들고 싶습니다. 같은 사용자 정의 개체 유형을 사용하는 경우Qt.createQmlObject()로 사용자 정의 qml 객체 인스턴스 만들기

var newTarget = Qt.createQmlObject('import Qt 4.7; Image {source: "widgets/SlideSwitchImages/knob.png"; }', parent); 

그러나 실패 :

그것은 이미지처럼 내장 QML 오브젝트를 사용하는 경우 작동

var newTarget = Qt.createQmlObject('import Qt 4.7; Target {}', parent); 

그러나 나는 QML의 모든 일에 정적으로 내 사용자 지정 대상 유형을 사용하는 경우 공장. 알려진 제한 사항이나 해결 방법이 있습니까? the docs에서

답변

4

임의의 수의 대상 인스턴스 만 필요하면 구성 요소를 사용하는 것이 좋습니다. 당신은 내가 당신이 다른 디렉토리에서 대상 구성 요소가 있고 그냥 import 문을 놓치고 추측 Qt.createQmlObject 호출에 충실하려는 그러나 경우

Component { 
    id: targetFactory 
    Target {} 
} 

var newTarget = targetFactory.createObject(parent, properties) 

. string 매개 변수는 호출하는 디렉토리와 동일한 디렉토리에서 자체적으로 작동하는 QML 파일의 내용이어야합니다.

예.

var newTarget = Qt.createQmlObject('import QtQuick 1.0; import "../Targets"; Target {}', parent); 

진술 : Qt 4.7 가져 오기는 추가 버전의 QtQuick을 허용하지 않으므로 더 이상 사용되지 않습니다.

+0

안녕하세요, 구성 요소 공장 제안에 감사드립니다. 다음 번에 사용하겠습니다. 나는 실제로 qml 문자열에서 import 문을 놓쳤다. 그것은 createQmlObject 자체의 범위를 가지고있는 것 같습니다. –

1

: 자바 스크립트에서 동적으로 객체를 생성하는 방법은 두 가지가 있습니다

. Qt.createComponent()를 호출하여 Component 객체를 동적으로 만들거나 Qt.createQmlObject()를 사용하여 QML 문자열에서 항목을 만들 수 있습니다. 기존 구성 요소가 .qml 파일에 정의되어 있고 해당 구성 요소의 인스턴스를 동적으로 만들려면 구성 요소를 만드는 것이 좋습니다. 그렇지 않으면 항목 QML 자체가 런타임에 생성 될 때 QML 문자열에서 항목을 만드는 것이 유용합니다 ( ).

나는 이것이 당신이 런타임에 응용 프로그램이 그것의 존재 때문에 인식하는 항목 유형을 정의 한 경우 createQmlObject에만 작동합니다 것을 의미하는 이해합니다.

createComponent은 동일한 기능을 수행하는 것으로 보입니다. 그러나 항목 유형은 .qml 개의 파일로 미리 정의되어 있습니다.

+0

답변 감사합니다. 런타임에 유형을 정의했으며 다른 유형과 마찬가지로 정적 qml 내에서 사용할 수 있지만 createQmlObject 메소드에는 자체 범위가 있으므로 문자열의 일부로 자체 import 문이 필요합니다. –

관련 문제