2017-12-11 53 views
0

QML QT5에서 할당 된 속성 구성 요소를 표시하는 방법은 무엇입니까? Main.qml에서

Item { 
    id:windowId 
    width:200;height;200; 
    Page{ 
     style: MyStyle{ 
      id:myStyleId 
      background: Rectangle{ 
       width:30;height;30;color:"blue" 
      } 
      background2: Rectangle{ 
       width:10;height;10;color:"green" 
      }    
     } 
    } 
} 

Page.qml에서

나는 스타일 속성 페이지를 만드는 동안 MyStyle에 할당 한 이상 당신이 볼 수 있듯이 MyStyle.qml

Item { 
    id: mystyleId 
    property Rectangle background 
    property Rectangle background2 
    //How to display the background and background2 properties 
} 

에서

Item { 
    id: pageId 
    property MyStyle style 
    //How to display the style property 
} 

페이지 및 backgr에 스타일 속성을 표시하려면 어떻게해야합니까? ound 속성은 MyStyle을 insode합니다.

나는 또한 유사 MyStyle.qml에서 Page.qml이와 같은 일을 시도하지만, 여전히 오류

Item { 
    property alias style : loader.sourceComponent 

    Loader { id: loader } 
} 

끝에 거친 도면없이 표시되지 않을 때 : (1) 페이지. qml; Style.qml

에서 (2,3) 사각형은 속성에 할당되는 Main

+0

원하는 결과를 보여주는 작은 drwaing을 추가하고 Qt 버전 중 하나 (Qt4 또는 Qt5)를 선택할 수 있습니까? 이러한 버전에서는 상황이 크게 다를 수 있습니다. 나는 오직 Qt5로만 도울 수있다. – derM

+0

@derM 나는 대략적인 스케치를 만들었고 그것은 Qt5를위한 것이다. – Imran

답변

2

항목은 parent 설정을받지 않습니다.

당신이 개념이있을 때 :

ItemA { 
    ItemB {} 
} 

ItemB가 자동으로 ItemA.children의 일부 ItemB.parentItemA로 설정됩니다로 설정됩니다. 여기

ItemA { 
    property Item someItem: ItemB {} 
} 

당신이 null을 할 ItemB.parent을두고 ItemBItemA.children에 표시되지 않습니다

이 당신이 작성하는 경우, 발생하지 않습니다. 이 의미


, 당신은 하나가 children -property, 또는 아이의 parent -property를 설정하여 원하는 부모에 추가하여, 수동으로 설정해야합니다.

ItemA { 
    id: itmA 
    property Item someItem: ItemB { parent: itmA } 
} 

ItemB을 나타냅니다.


같이, 대부분, 당신은 당신이 수행 할 onPropertyChanged -slot를 사용할 수있는 속성에 뭔가를 넣어 그 때마다 쓰기 싶지 않아이 경우

ItemA { 
    property Item someItem 
    onSomeItemChanged: someItem.parent = this 
} 

을 때 새 ItemsomeItem에 할당하면 이전 패밀리는 부모를 잃지 않고 같은 위치에 그려집니다. 따라서 부모를 다시 제거하기 위해 연결을 만들 수도 있습니다. 이를 위해 우리는 연결에 대한 참조 저장하는 클로저를 생성합니다 :

Item { 
    id: root 
    property Item someItem 
    onSomeItemChanged: { 
     console.log('SomeItem changed') 
     someItem.parent = root 
     this.onSomeItemChanged.connect(generateClosure(someItem)) 
    } 

    function generateClosure(smeItm) { 
     return function() { if (someItem !== smeItm) { smeItm.parent = null } } 
    } 
} 

또는 당신은 우리가 폐쇄이 기능을 사용 원래 부모을 복원 하려면 다음

function generateClosure(smeItm, originalParent) { 
    return function() { if (someItem !== smeItm) { smeItm.parent = originalParent } } 
} 

및 원래 부모에 대한 참조가있는 한 호출합니다.