2017-01-30 11 views
0

:이 기능이 작동하지 않을 수 있으므로 즉시 반환하고, 그문서를 오해했거나 Qt.createQmlObject (거의 쓸모가 있습니까?)입니까? <a href="http://doc.qt.io/qt-5/qml-qtqml-qt.html#createQmlObject-method" rel="nofollow noreferrer">the Qt docs</a>에서

참고 QML 문자열을로드하면 새로운 구성 요소 (즉, 아직로드되지 않은 외부 QML 파일입니다). 이 경우 Qt.createComponent()를 대신 사용해보십시오.

그러나

은 내가 아는 한, 모든 QML 파일은 "외부"이며, 그 중 하나는 부하 임의로 긴 지연 수 있습니다.

예. 내가 이렇게하면 :

Qt.createQmlObject('\ 
    import QtQuick 2.0\n\ 
    Rectangle { } 
    ', 
    parentObject, 
    "myRect"); 

이 코드를 실행할 때까지 Rectangle이로드되지 않으면 어떻게됩니까? 이 논리에 따라 전달 된 문자열에 Qt.createQmlObject을 사용하는 코드는 위험합니다. 따라서 항상 Qt.createComponent을 사용해야합니다.

나는이 문서들을 오해하고 있다고 확신하지만, 나는 그들에 대한 올바른 해석이 무엇인지 알지 못한다.

+0

'createComponent()'가 다르다. 메모리 내 문자열에서 작동하지 않는다. 외부 파일에 대한 URI가 필요하다. 여기 비동기 적재가 허용되며, 동기화와 비동기 중 하나를 선택할 수 있습니다. – dtech

+0

@ddriver : 나는 그것을 깨달았다. 내가 말하고있는 것은'Qt.createComponent'는'Qt.createQmlObject'를 대체 할 수있는 것이지, 메모리 내 문자열 대신 uri에서 외부 파일로로드됩니다. 그리고'Qt.createQmlObject'에있는 것처럼 보이는 치명적인 문제는 없습니다. –

+0

테스트하지는 못했지만 createQmlObject는 파일을 로컬에서 사용할 수 있고 모듈이 가져 오기 경로에있는 한 괜찮을 것으로 생각됩니다. 생성 된 코드에 의존하는 경우 문자열을 파일로 저장하고 createComponent를 안전한 측면에서만 사용하십시오. – dtech

답변

0

이 코드를 실행할 때까지 Rectangle이로드되지 않으면 어떻게됩니까? 이 논리에 따라 전달 된 문자열에 Qt.createQmlObject를 사용하는 모든 코드가 위험합니다. 그래서 우리는 항상 대신 Qt.createComponent를 사용해야합니다.

라이브러리 유형 (예 : 직사각형)의 경우 가져 오기 문에 어딘가에 도달하면 바로 사용할 수 있습니다. 포함하는 문서에 이러한 가져 오기가 포함되어있어 UI를 제공하므로 Rectangle을 createQmlObject에 이미 사용할 수 있습니다. 실제로 거기에 많은 문제가 없을 것입니다.

디스크에로드 된 모든 항목에 대해서도 해당 내용을 가져 오는 것은 매우 복잡한 과정이 아니므로 빠른 테스트 및 코드 읽기에 따라 잘 수행해야합니다. 이해할 수 있듯이 설명서에 언급 된 내용은 네트워크를 통해로드 가져 오기를 시도 할 수있는 경우에 대한 경고입니다. 이러한 경우로드가 불확실한 시간 동안 차단 될 수 있습니다. 설명서가 명확해질 수 있습니다. bugreports.qt.io에 문서 버그를 제기하는 것이 좋습니다.

이 말한, 개인적으로, 나는 당신이 당신이 할 수있는 경우 createQmlObject을 방지하고, 여러 가지 이유로 등 Qt.createComponent, Component {}을 사용하는 것이 제안 갖는

  • createQmlObject의 성능에 큰되지 않습니다 (컴포넌트를 재사용하지 않고 매번 컴포넌트를 생성해야하므로)로드 시간에 경고를 잃고 런타임시 경고를 교환합니다 (createComponent는 동일한 문제가 발생하지만이 경우에는 성능이 문제가됩니다.)
  • 질문에 추가 제한이있다.