Вопрос

Я пытаюсь создать словарное приложение на основе 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, поскольку интерпретатор будет жаловаться на создание объекта, специфичного для состояния.

Это было полезно?

Решение

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

Component {
    id: suggestionDelegate
    SuggestionDelegate { }
}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top