QML: Comment puis-je transmettre des propriétés de modèle à un délégué chargé dans un délégué GridView (ou ListView)?

Je suis d'essayer de construire une réutilisables QML Composant interne hôtes un GridView. Chaque élément dans le contrôle GridView a un ensemble de comportements (surtout de l'affichage et de la souris à base de trucs) qui est commun dans toute l'application. Cependant, ce qui est affiché à l'intérieur de la GridView éléments de modifications en fonction du cas d'utilisation. (C'est le même Composant encapsulé pour une GridView, mais ailleurs, dans l'application, il peut utiliser un autre Composant.)

Donc, ce que je voudrais faire est d'avoir chaque invocation offre un délégué qui est ajouté à chaque élément dans le contrôle GridView, ce qui est déjà un délégué. En d'autres termes, quelque chose comme ceci:

MyGrid.qml

import QtQuick 1.1

Rectangle {
  id: myGrid
  objectName: "myGrid"

  property Component internalDelegate
  property variant internalModel

  GridView {
    anchors.fill: parent

    delegate: Row {
      Loader {
        sourceComponent: myGrid.internalDelegate
      }
    }

    model: parent.internalModel
  }
}

L'idée est que le Chargeur à l'intérieur de la GridView délégué des charges fourni par l'utilisateur délégué, qui ressemblerait à quelque chose comme ceci:

Principal.qml

import QtQuick 1.1

Rectangle {
  anchors.fill: parent

  width: 300
  height: 200

  MyGrid {
    anchors.fill: parent

    internalDelegate: Text {
      text: name
    }

    internalModel: ListModel {
      ListElement {
        name: "a"
      }

      ListElement {
        name: "b"
      }
    }
  }
}

Toutefois, cela ne fonctionne pas. QML rapports que le "nom" est une variable inconnue à l'intérieur de l'élément de Texte. Si je remplace le nom de la variable une chaîne de caractères (c'est à dire "bonjour"), il fonctionne comme prévu.

Ma question est, comment puis-je passer le "nom" de la variable à internalDelegate, ou mieux encore, l'ensemble du Modèle de disponible, donc internalDelegate pouvez accéder à tous (depuis l'appelant est la définition du modèle).

Un côté la question est: Est-il une meilleure façon de le faire?

source d'informationauteur Jim Nelson | 2011-12-09