J'ai écrit une classe client (héritant de QObject) en C++ et enregistré son type avec succès avec QML. Actuellement, je crée des objets de cette classe statiquement en C++ et je stocke un pointeur dans un modèle qui implémente QAbstractListModel. En QML, je peux accéder parfaitement aux objets en tant qu'éléments du Modèle.Créer un objet C++ personnalisé dans QML et le stocker dans un modèle C++
Le customObject est un objet non visuel.
Je visualise dans une autre partie de l'application GUI (QML) les objets dans un ListView avec un délégué.
Cependant maintenant je voudrais créer dynamiquement des objets de ma classe personnalisée dans QML et les stocker également dans le modèle. C'est là que je me bats. J'espère que je pourrais créer un customObject comme ceci:
import com.myProject.myCustomStuff 1.0
...
Button{
id: createObjBtn
text: "create new CustomObj"
onClicked:{
var obj = MyCustomObj;
myObjectManager.addObj(obj); // object holding the implemented QAbstactListModel
console.log(typeof(obj)); // returns [Object object]
console.log(Qt.isQtObject(obj)) // returns false
}
}
J'apprécierais vos pensées. Peut-être que quelqu'un sait comment le faire correctement?
Merci!
Update 1
Comme demandé par Simon-Warta, voici la mise en œuvre de Constructor MyCustomObj.
MyCustomObj.cpp
MyCustomObj::MyCustomObj(QObject *parent) : QObject(parent)
{
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
}
merci! Cela semble être un très bon conseil. Je vais créer en C++ une méthode d'usine pour ma classe myObjectManager, puis gérer complètement la création, le stockage et la suppression d'objets en C++. – DH1TW
Je suis confus par "Le QAbstractListModel est conçu comme une enveloppe autour d'un conteneur, oui, vous pouvez mettre le conteneur dans la classe dérivée de QAbstractListModel, mais vous n'avez pas vraiment à" ... pouvez-vous expliquer cela plus? Je pense que nous avons toujours mis un conteneur à l'intérieur (dans sa classe dérivée) et c'est un peu comme l'emballer, mais vous semblez dire que ce sont deux choses différentes? – zar
@zar - par exemple, dans mon cas, j'ai des millions d'objets, mais je n'ai pas besoin de les visualiser tous en même temps. Donc, dans ce cas, j'utilise un modèle de "pièce jointe" qui ne contient pas les données, fournit simplement une interface de modèle de liste pour une vue de liste pour y accéder. L'intention de la classe de modèle est de fournir un accès aux données, l'emplacement réel des données n'est pas pertinent. – dtech