2016-10-18 2 views
0

2 개의 qml 파일이 있습니다.다른 QML에서 QML 속성 설정

첫 번째 qml 파일에서 두 번째 qml frompert를 설정하고 싶습니다.

**first.qml** 

var cmponent = Qt.createComponent("second.qml"); 
    var newObj = cmponent.createObject(swipeView); 
    newObj.pageIndex = i; 
    swipeView.insertItem(swipeView.currentIndex+i,newObj) 

그리고 SwipeView에 삽입하십시오.

여기서 'pageIndex'은 2 번째 qml의 정수 속성입니다. 두 번째 qml 파일에는 셀이있는 GridLayout이 있습니다. 나는

이 속성을 선언 역동적 pageIndex 부동산

second.qml를 기준으로 셀 내용을 표시해야합니다.

property int pageIndex: 0 
    onPageIndexChanged:{ 
     console.log("onPageIndexChanged :" +pageIndex) 
     home_grid.update() 

    } 

onPageIndexChanged 메서드가 트리거되지만 속성 값을 기반으로 그리드 셀을 설정하려고합니다.

컴포넌트의 초기화가

var cmponent = Qt.createComponent("second.qml"); 

세포가 GridLayout과에로드하는 동안 문제가 이다.

이 문제를 어떻게 해결할 수 있습니까?

이 그것은 내 의견을 설명한다 (나는 주먹 질문에 대한 나의 예를 사용) :

+1

1 : 왜 JS-Functions로 객체를 만드나요? 2 : GridLayout은 어디에 있습니까? 거기에 표시 할 셀은 무엇입니까? 인덱스와 함께 GridView를 사용할 수 있습니까? – derM

+0

1. 뷰를 동적으로 만들고 싶습니다. ListModel 카운트에 근거 해 각보기에는 최대 요소가있는 격자가 있습니다. 예 : 모델에는 7 개의 요소가 있고 firstView에는 6 개의 요소가 표시되고 swipeView로 sendView에는 나머지 1 개의 디스플레이가 표시됩니다. 2. "GridLayout"은 다른 qml 파일 (second.qml)에 있습니다. 각 셀/요소는 모델을 기반으로 한 값에서 격자에 표시됩니다. –

+0

여러 개의 뷰에서 하나의'ListModel '을 사용할 수 있어야합니다. 그래서'GridLayout' 대신에'GridView'를 사용하도록 제안 할 것입니다. 그런 다음이 'GridView' 대리자에서'magic '변수'index'를 사용할 수 있습니다. – derM

답변

0

나는 당신이 원하는 것은이라고 생각합니다. 다른보기를 다른 파일에 넣을 수 있습니다. 객체를 만들 때 두 모델 모두에 동일한 모델을 전달하면됩니다.

delegate: TestObj { 
     width: model.width; height: model.height; text: index 
    } 

두 번째 QML 파일의 종속성을 최소화 할 것 : 여기

ListModel { 
    id: lm 
    ListElement { width: 40; height: 40 } 
    [...] 
    ListElement { width: 40; height: 40 } 
} 

SwipeView { 
    width: 200 
    height: 800 
    clip: true 
    currentIndex: 0 

    Repeater { 
     model: Math.ceil(lm.count/6) 
     delegate:   ListView { 
      width: 200 
      height: 800 
      property int viewIndex: index 
      model: DelegateModel { 
       model: lm 
       groups: DelegateModelGroup { name: 'filter' } 
       Component.onCompleted: { 
        for (var i = viewIndex * 6; i < lm.count && i < (viewIndex * 6) + 6; i++) { 
         items.setGroups(i, 1, ['items', 'filter']) 
        } 
       } 

       filterOnGroup: 'filter' 

       delegate: Rectangle { 
        width: 180 
        height: 30 
        border.width: 1 
        Text { 
         anchors.centerIn: parent 
         text: index 
        } 
       } 
      } 
     } 
    } 
} 

GridView { 
    clip: true 
    x: 300 
    width: 600 
    height: 600 
    model: lm 

    delegate: TestObj { 
    } 
} 

당신은 또한 쓸 수 물론 대리인 TestObj

Rectangle { 
    width: model.width 
    height: model.height 
    property alias text: myText.text 
    Text { 
     id: myText 
     anchors.centerIn: parent 
     text: index 
    } 
} 

에 대한 코드입니다.

+0

GridItem에서 많은 항목을 표시하고 일부 조건 조건을 기반으로해야합니다. 그리드 항목에 대해 별도의 QML을 만들었습니다. –

+0

그건 너에게 달렸어. 아시다시피, 나는 그걸 또한 해냈습니다. TestObj.qml – derM

관련 문제