qt QDeclarativeListProperty добавить элемент из приложения qml

есть ли смысл добавлять элемент в QDeclarativeListProperty из файла qml во время выполнения? в цикле, например:

var i;
for(i = 0 ; i < 100 ; ++i)
{ listOfItems.append(MyItem {text:"list"+i})
}

а listOfItems - это список QDeclarativeListProperty... я не хочу этого делать:

    listOfItems:     
   [               
        MyItem{text:"list val1"},
        MyItem{text:"list val2"},       
         ......
   ]

я отображаю этот список в qml, и данные для списка поступают из объекта qt....


person dan    schedule 30.06.2011    source источник


Ответы (2)


Вы не можете, QDeclarativeListProperty (или QQmlListProperty в Qt5) затрагивается только один раз, во время создания экземпляра, после этого вы не можете добавить/удалить какой-либо элемент в нем.

Более того, в коде JavaScript вы не можете использовать синтаксическую форму Class { }, она специфична для QML.

person TheBootroo    schedule 27.03.2013
comment
Если вы хотите создать новые объекты QML из императивного кода JS, вы должны использовать метод Qt.createComponent(), но в любом случае вы не сможете повлиять на созданный объект на свойство списка. - person TheBootroo; 27.03.2013
comment
Возможно, если вам нужен список элементов, сначала создайте компонент с правильным методом, а затем добавьте ссылку на этот элемент в свойство 'var', которое может содержать массив Js, чтобы вы могли .push(myitem) в нем. - person TheBootroo; 27.03.2013
comment
Если вам нужно, чтобы этот массив был на стороне C++, вам понадобятся некоторые хитрые вещи QVariantList, поэтому подумайте об этом, действительно ли вам нужна эта концепция или вы можете сделать другую, которая намного проще. - person TheBootroo; 27.03.2013

Если я правильно понял вашу проблему, вы ищете сигнал Component.onCompleted

http://doc.qt.nokia.com/main-snapshot/qml-component.html#onCompleted-signal

person blakharaz    schedule 30.06.2011