Frage

Ich versuche, eine QML-basierte Wörterbuch-Anwendung zu machen. Es holt die Wortdefinition über ein XML-RESTful API und zeigt sie in einem Listview. Ich habe es in diesem rudimentären Modus arbeiten. Aber jetzt versuche ich zwei Staaten für das Listview zu implementieren. Standardansicht mit den Definitionen und eine „Meinten Sie“ Art Vorschlagsliste für, wenn die Suche fehlgeschlagen

Mein aktueller Code für das Listview ist wie folgt aus:

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
    }

, die diesen Fehler gibt:

Unable to assign QObject* to QDeclarativeComponent*

für die PropertyChanges Erklärung. Es gibt auch eine Bindungsschleife, aber das ist nicht wirklich ein Problem kann ich nicht fix. Mein Problem ist, wie kann ich die Zustände definieren. Ich kann nicht das Modell instanziiert und in der Staats Erklärung entweder als Dolmetscher übertragen wird beschweren sich über eine zustandsspezifische Objekt zu erzeugen.

War es hilfreich?

Lösung

SuggestionDelegate instanziiert wird. Die Delegierten Eigenschaft erfordert eine Komponente, die es sich für jedes Element instanziiert wird es anzeigt. So eine Komponente zur Verfügung zu stellen, anstatt eine Instanz müssen Sie die SuggestionDelegate in einer Komponente wickeln und die Komponenten-ID in dem Property verwenden:

Component {
    id: suggestionDelegate
    SuggestionDelegate { }
}

Andere Tipps

Obwohl Martin-Lösung das Problem behebt ich mit war, kam ich mit einem besseren Design für die Benutzeroberfläche auf. Da die Definitionen und Vorschläge sind sich gegenseitig ausschließende sehen, implementiert ich jeweils als eigene Position, die die gleiche Geometrie aufweisen und entsprechend dem aktuellen Zustand angezeigt oder ausgeblendet. Dies ermöglicht auch schöne Übergang Animationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top