Creazione modello vista dinamici
-
Vorrei sapere se la mia idea può essere fattibile:
- Creo una classe C++ che contiene elementi che potranno essere di qualsiasi genere
- Registro la classe come tipo qml (esempio provaContenitore.qml)
- Creo dinamicamente un'istanza di questo tipo qml
4 creo dinamicamente un altro componente qml (non c++) che contiene una vista e passo in fase di istanziazione una proprietà di provaContenitore.qml che contiene gli elementi come modello del nuovo oggetto qml
E' una cosa che può funzionare oppure nel passaggio ho dimenticato o sbagliato qualcosa?
-
Ciao Polly, cosa intendi esattamente per creazione dinamica?
Questo? https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html
In ogni caso, dalla documentazione qui sopra sembra che il contesto per creareComponent/createObject sia il QQmlContext da cui si invoca il metodo: https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html#maintaining-dynamically-created-objectsPer quale motivo hai necessità di creare dinamicamente? Non è una strategia molto comune nelle applicazioni QML, a parte quando si utilizzano i Loader.
-
Ti spiego, vorrei creare una semplice app turistica. L'idea di fondo sarebbe quella di usare un file XML per estrapolare i nomi delle attrazioni turistiche in modo da riempire una listview e quello l'ho già fatto. In base all'attrazione scelta il programma dovrebbe creare una pagina (questa pagina la creo dinamicamente e la inserisco in uno stackview) e facendo sempre riferimento al file XML recuperare il tipo di elemento (pagina web, video, slideshow) e il suo source. Gli elementi della pagina sarebbero 4 (messi casualmente a seconda della attrazione) inseriti in una gridview e vorrei crearli dinamicamente. Per l'idea avevo pensato di usare come la nella lista delle attrazioni l'XMLLISTMODEL , ma poi non riuscivo a creare gli elementi da inserire . Mi è stato suggerito di fare un if all'interno del javascript per scegliere dal type i file Qml e creando 3 component in base ad ogni tipo di file. E inserire attraverso un loader. Fatto ma poi non mi apparivano a schermo e quindi mi suggerivano ulteriormente di tornare alla funzione dello stackview per metterli con push() ma non sapevo come. Allora ho pensato di passare tramite il C++ per estrapolare gli elementi di XML in base al pulsante cliccato, caricarli in un contenitore, generarli con create() della classe object e poi inserirli in un contenitore di object stessi e passarlo infine come modello alla vista che come scritto sarebbe stato creato e inizializzato. Ammetto che è un po' contorta come strada ma è la prima volta che mi cimento con un'idea del genere.