Come rendere basato sullo stato cambio di modello in QML
Domanda
Sto cercando di presentare una domanda di dizionario QML-based. Si recupera la definizione parola tramite API RESTful XML e li visualizza in una lista. Ce l'ho a lavorare in questo modo rudimentale. Ma ora sto cercando di attuare due stati per il ListView:. Guarda la serie con le definizioni e di una "volevi dire" tipo suggerimenti lista per quando fallì la ricerca
Il mio codice corrente per la ListView è in questo modo:
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
}
che dà questo errore:
Unable to assign QObject* to QDeclarativeComponent*
per la dichiarazione PropertyChanges
. C'è anche un ciclo vincolante ma che non è davvero un problema che non avrebbe potuto risolvere. Il mio problema è come faccio a definire gli stati. Non posso istanziare il modello e delegare all'interno della dichiarazione dello Stato o come l'interprete si lamenterà di creare un oggetto specifico dello stato.
Soluzione
SuggestionDelegate viene istanziato. La struttura delegato richiede un componente che esso stesso un'istanza per ogni articolo viene visualizzato. Quindi, per fornire una componente piuttosto che un caso è necessario avvolgere il SuggestionDelegate in un componente e utilizzare l'ID componente nelle PropertyChanges:
Component {
id: suggestionDelegate
SuggestionDelegate { }
}
Altri suggerimenti
Anche se la soluzione di Martin risolto il problema che stavo avendo, mi si avvicinò con un design migliore per l'interfaccia utente. Poiché le definizioni e suggerimenti view sono mutuamente esclusive, ho implementato ognuno come articolo che hanno la stessa geometria e vengono visualizzate o nascoste secondo lo stato attuale. Ciò consente anche di animazioni di transizione belle.