Maison > développement back-end > C++ > Comment créer un modèle objet générique à utiliser dans QML ?

Comment créer un modèle objet générique à utiliser dans QML ?

Linda Hamilton
Libérer: 2024-12-28 21:22:12
original
599 Les gens l'ont consulté

How to Create a Generic Object Model for Use in QML?

Comment créer un modèle d'objet générique à utiliser dans QML

Pour enregistrer un modèle Qt en tant que propriété d'un QObject, vous pouvez utiliser la macro Q_PROPERTY. Cependant, tous les types de modèles ne sont pas compatibles avec cette approche.

Utilisation d'AnimalModel

Bien qu'il soit courant de transmettre un QAbstractListModel directement à une vue QML, il n'est pas possible de l'enregistrer. comme propriété d'un QObject utilisant Q_PROPERTY.

Création d'une dynamique Modèle d'objet

Pour surmonter cette limitation, vous pouvez créer un QObject personnalisé qui contient des modèles de n'importe quel type de données. Prenons l'exemple suivant :

class DataObject : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
    Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
    ...

    AnimalModel m_modelAnimals;

    Q_PROPERTY(AnimalModel *modelAnimals READ modelAnimals NOTIFY modelAnimalsChanged)
};
Copier après la connexion

Cela crée un QObject avec une propriété qui renvoie un pointeur vers AnimalModel. Le modèle est ensuite accessible en QML comme ceci :

DataObject {
    modelAnimals: {
        // Manipulate the model here
    }
}
Copier après la connexion

Modèles sans schéma

Si vous désirez plus de flexibilité, vous pouvez créer des modèles sans schéma qui autoriser les objets avec des propriétés arbitraires. Pour y parvenir :

  1. Créez un modèle QAbstractListModel ou QObject qui stocke QObject .
  2. Fournissez un rôle d'objet unique qui renvoie l'objet.
  3. Utiliser un Loader en tant que délégué pour instancier différentes implémentations de l'interface utilisateur QML en fonction de l'objet type.
  4. Implémentez QQmlListProperty et Q_CLASSINFO("DefaultProperty", "container") pour que le modèle permette la composition dynamique à l'aide de la syntaxe déclarative de QML.

Utilisation de List

Voici un exemple de modèle de liste générique qui prend en charge divers objets types :

class List : public QAbstractListModel
{
    Q_OBJECT
    QList<QObject *> _data;

    ...
};
Copier après la connexion

Vous pouvez enregistrer ce modèle en utilisant :

qmlRegisterType<List>("Core", 1, 0, "List");
Copier après la connexion

Et l'utiliser dans QML comme suit :

List {
    QtObject { ... }
    QtObject { ... }
    List {
        QtObject { ... }
        QtObject { ... }
    }
}
Copier après la connexion

Tri dynamique et Filtrage

Pour rendre ce modèle plus utilisable, vous pouvez mettre en place un tri et un filtrage proxy :

class SortingFilteringProxy : public QAbstractListModel
{
    Q_OBJECT
    QSortFilterProxyModel _proxy;

    ...
};
Copier après la connexion

Cela permet des capacités avancées de filtrage et de tri basées sur les propriétés arbitraires des objets contenus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal