Перезаписать ListModel, установленную в файле QML

У меня есть проект QML C ++, где часть C ++ связывает связь между бэкэндом и пользовательским интерфейсом QML.

Я установил подкласс QObject, который имеет свойство QAbstractListModel, как свойство контекста.

У одного из моих компонентов есть модель List, предопределенная в файле qml. И я хотел бы заменить это моей собственной моделью списка. Но я хочу сохранить эту модель, если свойство context не установлено. Это позволяет мне запускать Программу без части с ++.
Установка модели в качестве свойства контекста не выполнялась, потому что локальная модель переопределяла свойство контекста.

Мой QML выглядит так

Rectangle {
id: root_rect
objectName: "root_rect"width: 300
height: 300
color: "#dbdbdb"
ListModel {
id: myModel
ListElement {
name: "foo1"fin: "bar1"}

ListElement {
name: "foo2"fin: "bar2"}
}

Rectangle {
id: list_bg
color: "#ffffff"clip: true
anchors.top: parent.top
anchors.topMargin: 10
anchors.bottom: parent.bottom
anchors.bottomMargin: 10
anchors.left: parent.left
anchors.leftMargin: 10
anchors.right: parent.right
anchors.rightMargin: 10

ListView {
id: list_view1
anchors.fill: parent
delegate: Item {
x: 5
height: 40
Row {
id: row1
spacing: 10

Text {
text: name+" "+fin
anchors.verticalCenter: parent.verticalCenter
font.bold: true
}
}
}
model: myModel
//model: myObject.myModel
}
}
}

Возможно ли иметь как модель в файле qml для отображения значений по умолчанию в Designer, так и для тестирования графического интерфейса пользователя, и безболезненную перезапись, если я установил этот myObject как свойство контекста?

Редактировать: я использую QT 4 с QtQuick 1.1

2

Решение

Я не знаю, работает ли это с QtQuick 1, но вы можете положиться на обработку исключений. Примерно так работает с QtQuick 2:

ListView {
id: list_view1
anchors.fill: parent
delegate: Item {
...
}
model: myModel
Component.onCompleted:{
try{
model = myObject.myModel
}
catch(exception){
console.log("myObject unknown, switching to default model")
model = myModel
}
}
}
3

Другие решения


По вопросам рекламы [email protected]