Hi,

I'm trying to populate a Flickable with items created dynamically and I have a 
couple of problems that I´m not able to solve by myself. it would be great If 
someone have the time to take a look into my example. 

1. Property contentItem in Flickable doesn't seem to work. I had to use a 
workaround: I create a static invisible dummy Item in the Flickable and I use 
its parent as the parent of the dynamic objects.

2. Notification doesn't seem to work when I bind properties to the created 
items. 

I would like to understand whether I'm misunderstanding something of it is a 
known bug in Qt. You can find my code below. The example runs directly on the 
qmlviewer

Thanks a lot,

Diego.

import Qt 4.7

Rectangle{
        width: 320
        height: 400
        id: gui

        Flickable{
                id: dynamicflickableListDummy
                clip: true
                height: 100
                width: 200
                anchors.horizontalCenter: parent.horizontalCenter
                anchors.verticalCenter: parent.verticalCenter
                anchors.topMargin: 5

                function populateFlickable() {
                        var previousItem;
                         // BUG? Dummy item is a workaround. It doesn't work 
with dynamicflickableListDummy.contentItem. I get message: 
"Qt.createQmlObject(): Missing parent object"
                        var contentItem = dummy.parent;
                        if(contentItem.children.length > 1)
                                return;
                        for(var i=0;i<10;++i){
                                var qmlCode = 'import Qt 4.7; Rectangle 
{radius: 5; width: 75; height: 20; Text{text: "Dynamic ' + i + '"; color: 
"white"; anchors.centerIn: parent}}';
                                var newItem = Qt.createQmlObject(qmlCode, 
contentItem);
                                dynamicflickableListDummy.contentHeight += 25;
                                newItem.anchors.horizontalCenter = 
contentItem.horizontalCenter;
                                newItem.anchors.topMargin = 5;
                                if (i==0)
                                        newItem.anchors.top = contentItem.top;
                                else{
                                        newItem.anchors.top = 
previousItem.bottom;
                                }
                                // The color of the button should be binded to 
the color of the created items. Initialization works, notification doesn't.
                                addBinding(buttonBody.color, newItem, 'color');
                                previousItem = newItem;
                        }
                }

                function addBinding(from, toObj, toProp) {
                        var bindObj = Qt.createQmlObject("import Qt 4.7; 
Binding {}", toObj);
                        if (bindObj) {
                                bindObj.value = from;
                                bindObj.target = toObj;
                                bindObj.property = toProp;
                        }
                        else {
                                console.log("error creating binding object");
                                console.log(bindObj.errorString());
                                return false;
                        }
                        return true;
                }

                Rectangle {
                        id: dummy;
                        color: "transparent";
                        width: 1;
                        height: 1;
                }
        }

        Rectangle{
                anchors.fill: dynamicflickableListDummy
                anchors.bottomMargin: -5
                color: "transparent"
                border.width: 2
                border.color: "gray"
                radius: 5
        }

        Rectangle {
                id: buttonBody
                anchors.top: dynamicflickableListDummy.bottom
                anchors.topMargin: 15
                anchors.horizontalCenter: parent.horizontalCenter
                property string text : "Create Dynamic Objects"
                border.color: "black";
                color: "steelblue";
                radius: 4
                width: 180
                height: 25
                Text {
                        id: buttonText
                        text: buttonBody.text; color: "white"
                        anchors.centerIn: parent
                        smooth: true
                }
                MouseArea {
                        id: mr
                        anchors.fill: parent
                        onClicked: { 
dynamicflickableListDummy.populateFlickable();} 
//dynamicflickableList.populateFlickable(); }
                }
                states: State {
                        name: "pressed"; when: mr.pressed
                        PropertyChanges { target: buttonBody; color: "red" }
                }
        }
}

_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to