Как сделать изменение модели на основе состояния в QML - PullRequest
1 голос
/ 23 сентября 2010

Я пытаюсь создать приложение для словаря на основе QML. Он выбирает определение слова через XML RESTful API и отображает их в ListView. У меня это работает в этом элементарном режиме. Но теперь я пытаюсь реализовать два состояния для ListView: стандартное представление с определениями и список предложений типа «вы имели в виду» для случая, когда поиск не удался.

Мой текущий код для ListView выглядит так:

ListView
{
    SuggestionModel{id:suggestionModel; currentWord : "test"}
    SuggestionDelegate{id:suggestionDelegate}
    model : XmlModel{id: standardModel; currentWord : "test"}
    delegate : ListDelegate{id:standardDelegate}
    clip : true
    anchors.top : hbox.bottom
    y : hbox.height + 3
    width : parent.width
    height : parent.height - hbox.height
        id : list
        states :
                State { name: "suggestion"; when: list.model == suggestionModel ||
                        list.model.status ==  XmlListModel.Ready && list.count == 0
                PropertyChanges {
                    target: list
                    model : suggestionModel
                    delegate : suggestionDelegate
                }
            }

        focus : true
        keyNavigationWraps : true
    }

, который дает эту ошибку:

Unable to assign QObject* to QDeclarativeComponent*

для объявления PropertyChanges. Есть также обязательный цикл, но это не та проблема, которую я не смог исправить. Моя проблема в том, как мне определить состояния. Я не могу создать экземпляр модели и делегировать внутри объявления State, так как интерпретатор будет жаловаться на создание объекта для конкретного состояния.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

OfferDelegate находится в стадии разработки. Свойство делегата требует компонента, который он создает для каждого отображаемого элемента. Поэтому для предоставления компонента, а не экземпляра, вам нужно обернуть OffertionDelegate в компонент и использовать идентификатор компонента в PropertyChanges:

Component {
    id: suggestionDelegate
    SuggestionDelegate { }
}
0 голосов
/ 23 сентября 2010

Хотя решение Мартина устранило проблему, с которой я столкнулся, я придумал лучший дизайн для пользовательского интерфейса.Поскольку представления определений и предложений являются взаимоисключающими, я реализовал каждый из них как отдельный элемент, имеющий одинаковую геометрию и отображаемый или скрываемый в соответствии с текущим состоянием.Это также позволяет создавать красивые анимации перехода.

...