从另一个QML设置QML属性

时间:2016-10-18 09:14:46

标签: qt qml components grid-layout

我有2个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'是第二个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 个答案:

答案 0 :(得分: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文件的依赖关系。