2014-06-11 1 views
2

Alias.qml형식 오류 : main.qml QML 배열에

import QtQuick 2.0 

Rectangle { 
    width: 100 
    height: 62 

    property var arr : [1,2,3,4] 
} 

Access.qml

import QtQuick 2.0 

Rectangle { 
    id: newq 

    width: 100 
    height: 62 

    property var yy : [1] 
    property var pp : [1] 

    onPpChanged: 
    { 
     console.log("\npp: " + pp.pop()) 
     console.log("\nyy: " + newq.yy.length + "\n") 
    } 
} 

을 정의되지 않은 재산 '길이'를 읽을 수 없습니다

import QtQuick 2.0 

Rectangle { 
    id: root 
    width: 360 
    height: 360 

    Alias 
    { 
     id: poi 
    } 

    Access 
    { 
     pp: poi.arr 
    } 
} 

이 줄에 오류가 표시됩니다.
console.log("\nyy: " + newq.yy.length + "\n")

어디에서 잘못 되었나요?

+0

확인이 도움이 될 수있는 경우 : http://qt-project.org/forums/viewthread/15244 및 http://qt-project.org/doc/qt-5/qml-var.html – trainoasis

+0

아마 거기에 var 대신 "variant"를 사용해야합니까? (두 번째 코드 블록 참조 : http://qt-project.org/doc/qt-4.8/qml-variant.html) – trainoasis

답변

2

pp이 변경되면 yy 속성이 아직 초기화되지 않았기 때문에 이러한 현상이 발생합니다. 당신은 Access.qml를 변경하여 볼 수 있습니다

import QtQuick 2.0 

Rectangle { 
    id: newq 

    width: 100 
    height: 62 

    property var yy : [1] 
    property var pp : [1] 

    onYyChanged: console.log("yy changed: " + yy) 

    onPpChanged: 
    { 
     console.log("pp changed: " + pp) 
     console.log("\nyy: " + newq.yy.length + "\n") 
    } 
} 

이 출력 :

qml: pp changed: 1,2,3,4

file:///E:/Dev/Projects/qt/qml-test/Access.qml:17: TypeError: Cannot read property 'length' of undefined

qml: yy changed: 1

당신은하지 pp 전에를 yy 결국 초기화되는 것을 볼 수 있지만 수 있습니다. 가능하다면 if (newq.yy) 수표로 리디렉션하거나 리팩터링하여이 상황을 피하십시오.

QML이 선언적 언어이므로 속성 할당 및 바인딩의 순서는 신뢰할 수 없습니다.

일부 관련 독서 :