2016-10-18 161 views
0

我有2个qml文件。从另一个QML设置QML属性

我想从第一个qml文件设置第二个qml fromperty。

**first.qml** 

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

并插入到SwipeView中。

其中'pageIndex'是2nd 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函数创建对象? 2:你的GridLayout在哪里?你想在那里展示的细胞是什么?你不能用索引作为模型的GridView吗? – derM

+0

1.我想动态创建视图。基于ListModel计数。每个视图都有具有最大元素6的网格。示例:模型包含7个元素,然后在firstView中显示6个元素,并使用swipeView切换这些视图,其余1个显示在sendView上。 2.“GridLayout”在另一个qml文件(second.qml)中。网格中的每个单元格/元素都基于模型的值显示。 –

+0

应该可以在多个视图中使用一个'ListModel'。所以我会建议使用'GridView'而不是'GridLayout'。然后你可以在这个'GridView'的委托中使用'magic'变量'index'来达到你的目的。 – derM

回答

0

我想你想要的是这样的:

(我用我的例子为你的拳头问题) 应该说明我的意见。 当然你可以把不同的视图放在不同的文件中。创建对象时,只需将相同的模型传递给两者。

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 
    } 
} 

当然,你也可以这样写代码:

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

这将减少你的第二个QML-文件的相关性。

+0

在GridItem中,我必须显示很多项目并基于某些条件条件。因此,我为Grid Item创建了单独的QML。 –

+0

这取决于你。正如你看到的,我也是这样做的,用TestObj.qml – derM