J'ai QAbstractListModel en C++ code et connecté avec QML GridView de Butons au moyen deQML: Signal GridView.onReloaded
QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
context->setContextProperty("keyboardModel", _keyboardModel);
L'objectif principal est d'obtenir les coordonnées globales de boutons dans le code C++. À cet effet, je trouve ces boutons avec la fonction QQuickItem::childItems()
et obtenir les coordonnées finales avec mapToGlobal()
.
Maintenant, quand j'ai changé le modèle C++, qml GridView a changé aussi. Mais, je ne peux pas attraper moment, quand arborescence QQuickItem hiérarchique entièrement actualisé (Il a besoin pour le bon fonctionnement QQuickItem::childItems()
)
Les signaux de GridView sur Ajouter, sur Supprimer ne fonctionne pas, lorsque le nouveau modèle a la même quantité d'éléments. Le signal de GridView onModelChanged s'est déclenché seulement quand j'ai connecté un autre modèle, pas quand j'ai changé celui-ci.
Existe-t-il un signal à reconnaître lorsque l'arborescence QQuickItem hiérarchique est entièrement actualisée? Ou existe-t-il une autre méthode pour obtenir dynamiquement les coordonnées globales de l'objet Qml?
Pourquoi voudriez-vous avoir les coordonnées du bouton en C++? Habituellement, vous avez le modèle de données en C++ et la vue en QML. Le modèle de données doit être agnostique en vue. De plus, vous * pouvez * mais * ne devriez pas * interroger QML à partir de C++. Laissez le côté QML dire au C++ ce que C++ doit savoir. – derM
Je devrais l'envoyer à une autre application. – Nikxp
Un 'GridView' utilise une instanciation dynamique, ce qui signifie que vous ne pouvez pas être sûr que tous les' Boutons 'définis dans votre modèle seront instanciés à chaque instant.De plus, le 'GridView' est un' Flickable' de sorte que les positions vont changer, lors de l'effleurement, où vous aurez beaucoup de changements pour des tonnes d'objets. Comment allez-vous (conceptuellement) gérer cela? C'est parce que dans votre question, vous ne gérez que * suppression et ajout * au lieu de feuilleter. Si c'est plutôt statique, vous devriez considérer un 'Repeater' et un' Grid' à la place. – derM