Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Liste d'objets c++ modifiables en qml.

Bonjour,

J'ai une petite question à propos du qml.

Le contexte:
Pour la réalisation de fiche de personnages pour rolisteam (mon soft), il y a parfois des éléments à nombres variables.
Si vous ne savez pas ce qu'est une fiche de personnage, imaginez un formulaire assez conséquent.

Par exemple, dans certains jeux la liste des compétences est variables.
Certains personnages peuvent en avoir 7, d'autres 15 .
Ce sont les lignes.
Une compétence est définie par plusieurs paramètres : un nom, un niveau...
Ce sont les colonnes.
Chaque champs du formulaire à plusieurs propriétés : id, label, valeur, valeurs acceptables, position,taille. ..

En qml, il me faut affiché ces lignes et colonnes, mais surtout il me faut rendre possible la modification. Détecter cette modification pour envoyer la mise à jour de la fiche sur le réseau.
De mémoire, les données dans un modèle c++ ne peuvent pas être modifié facilement depuis le qml.
Il me faut une solution dynamique dans le sens. Si un utilisateur à besoin d une ligne en plus , il n'a qu'à cliquer sur un bouton pour la générer.

Le petit plus, c'est que je gère un système de formule (comme un tableur) il serait intéressant que les éléments d'un tableau puisse être référencés par un index.

Il me faudrait une manipulation en qml de ce type la :
Skill[1].nom.value, Skill[1].level.value

Ou

SkillName[1].value, skillLevel[1].value

Dans les 2 cas, je dois être capable d'attribuer la valeur à une propriété d un item qml.
Si la donnée change en c++ le qml se met à jour et inversement.

Je ne sais pas si c'est clair mais poser le problème à l'écrit m'aide déjà â réfléchir.

Merci à vous

Réponses

  • 25 Aug modifié
    Slt,
    De mémoire, les données dans un modèle c++ ne peuvent pas être modifié facilement depuis le qml.
    Si,si.
    Je t'ai fais un exemple de double model cpp imbriqué et modifiable.
    image
    Comme tu le verra (un peu à l'arrache d'ailleurs) , il est très facile de cette façon d'imbriqué autant de niveau de model en cpp que tu le souhaites. (perso j'en est parfois 6).
    Cela complète un peu cette discussion : http://qtfr.dergen.fr/discussion/comment/121601/
    zip
    zip
    test_qml_model_with_libQtQmlTricks_v2.zip
    107K
  • Oui, donc j’avais raison un modèle classique est difficilement modifié.
    Le QQmlObjectListModel n’est pas un modèle classique. Vu toutes les API qui ont été rajouté pour dialoguer entre le QML et le C++.
    C’est bien foutu mais cela me fait comprendre qu’en passant par un modèle. Je dois avoir modéliser chaque ligne et une ligne contient plusieurs champs.
    Ce n’est vraiment pas comme cela que j’ai conçu la chose. Bref, cela me donne des pistes de réflexions. Merci!



  • 26 Aug modifié
    un modèle classique
    Ah, une nouvelle contrainte ?
    C'est quoi un modèle classique ? C'est par exemple QStringListModel, QStandardItemModel ?
    Car je vois mal comment atteindre tes besoins avec ce genre modèle "classique", qml ou pas d'ailleurs.
    Il n'est pas rare que l'on finisse par créer ces propres model.
    Vu toutes les API qui ont été rajouté pour dialoguer entre le QML et le C++.
    Non, pas vraiment. Car c'est très proche des model que j'implémentais quand je ne faisais que du c++. D'ailleurs, l'"API" est même très light. QQmlObjectListModel n'est qu'un model pur c++, utilisable aussi dans les projets sans qml, avec une réimplémentent basique du minimum vital et couplé avec un soin particulier sur la gestion des property, afin d'être compatible avec le qml si besoin.

    @+
  • 26 Aug modifié
    Non, un classique c’est un QAbstractModel. Regarde le .h de QQmlObjectListModel. Il y a plein de code inutile pour un usage dans du c++. L’auteur le dit lui même dans les commentaires «// QML slots implementation et // API for QML ».
    Il a créer des slots pour être notifier par le qml. C’est pas non plus la mer à boire certes. Mais voila, ces slots, sont en surplus dans un modèle classique.

    C’est le besoin de ce surplus que je trouve regrettable. Qt devrait travailler pour rendre cela transparent. Ce que je veux faire est absolument trivial en HTML + javascript ou en C++. En qml, il y a pleins de méthodes, mais aucune n’est l’officielle.

    En termes de fonctionnalité, effectivement, il n’y a pas de différences avec un modèle utilisable. Il y a les méthodes pour ajouter, supprimer, modifier un élément etc.

    Je m’oriente vers une solution plus pratique. Il faut voir que le code QML est généré et est visible par mes utilisateurs. Ils ne sont pas des dev. Je leur laisse la main sur le code. Ils peuvent y ajouter des éléments, le modifier. Passer par une view et un modèle me semble demander pas mal de notion autour du MVC. J’ai peur qu’ils n’osent pas rentrer dedans.

    L’option que j’ai en tête rendra cette appropriation plus facile.
Connectez-vous ou Inscrivez-vous pour répondre.