2013-06-27 14 views
6

qual è il modo corretto di ricaricare il file qml su QQuickView? Sto usando Qt Quick 2.1 e sto provando a scrivere un semplice programma che carica un file qml e lo visualizza. Attualmente lo sto creando creando un QQuickView e quando voglio ricaricare il file qml sto cancellando quello vecchio e ne sto creando uno nuovo. Qual è il modo corretto di farlo? chiamare QQuickView :: setSource con il nuovo file qml (o il file qml modificato) non ha funzionato per me.Come ricaricare il file qml su QQuickView

risposta

10

È possibile utilizzare il seguente (supponendo che si trovi in ​​una sottoclasse di QQuickView):

QUrl tmp = source(); 
setSource(QUrl()); 
engine()->clearComponentCache(); 
setSource(tmp); 
+0

ha funzionato. Pertanto, se si utilizza setSource con un file già utilizzato in precedenza, Qt utilizza il suo meccanismo di cache e non si preoccupa delle modifiche apportate all'interno del file qml. se si desidera che QQuickView ricolleghi il file qml, è necessario cancellare la cache QQmlEngine. È davvero d'aiuto, grazie mille. – otto

+0

Questa funzione motore viene visualizzata dai documenti per cancellare * tutta * la cache nell'intera interfaccia Qt Quick, il che potrebbe essere un problema se tutto ciò che si desidera è ricaricare un singolo oggetto QQuickView. Suona bene? –

+0

Sto usando WebView su QML e voglio distruggere tutti i cookie e i dati memorizzati. Ma engine() -> clearComponentCache(); setSource (source()); non aiuta – Robotex

1

Si può fare le sue vie:

  1. Creare un main.qml (il nome può essere qualsiasi cosa) di file, all'interno del quale, si sarà in realtà di carico e scarico altri file QML.

  2. Quindi utilizzare qml loader element per caricare/scaricare (aggiornare se possibile) qualsiasi altro file.

+1

In realtà ho provato questo e non ha funzionato, A causa del meccanismo di cache del QQmlEngine doesn Mi preoccupo delle modifiche apportate all'interno del file qml. Per risolvere questo ho bisogno di cancellare la cache come descritto nella risposta precedente. – otto