Lista anidada en qml: modelos de datos en modelos

Estoy tratando de implementar un sistema de comentarios anidados en una interfaz QML. Tengo un modelo en C ++ (subclasificado de QAbstractListModel) en el que cada elemento del modelo devuelve dos valores: uno es un QString y el otro es un QVariantMap con roleName "dataMap". Esto funciona bien con un QML ListView. Ahora cada QVariantMap contiene un elemento "datos" que además contiene una QVariantList "hijos". Ahora esto enumera básicamente otros QVariantMaps con la misma estructura. Mi idea para implementar esto fue usar un delegado recursivo en un QML ListView. A continuación se muestra la versión más simple de mi código.

ListView{
    id: commentsList
    anchors.fill: parent
    model: commentsModel
    delegate: commentsDelegate
}
Component{
    id: commentsDelegate
    ColumnLayout{
        Rectangle{
            width: 600
            height: 200
            Text {
                id: bodyText
                text: dataMap.body
                anchors.centerIn: parent
                Component.onCompleted: console.debug(text)
            }
        }
        ListView{
            id: childList 

            property var childModel: dataMap.replies.data.children // QVariantList exposed to QML 

            x: 15
            interactive: false
            model: childModel
            anchors.fill: parent
            delegate: commentsDelegate
        }
    }
}

La estructura de mi modelo es la siguiente:

class ListModel : public QAbstractListModel
{
    Q_OBJECT
public:
   ListModel(){}
   explicit ListModel(QObject* parent =0);
   ~ListModel();


   QHash<int, QByteArray> roleNames() const;
   QVariant data(const QModelIndex & index, int role) const;
   int rowCount(const QModelIndex &parent) const;
   void addItem(ListItem item);
   void clearModel();
private:
   QList<ListItem> m_itemsList;
signals:
   void dataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight);
};

La clase ListItem es simplemente

class ListItem
{

public:
    ListItem(QObject* parent = 0) : QObject(parent) {}
    virtual ~ListItem() {}

    ListItem(const QString & type, const QVariantMap & dataMap);
    QString type() const;
    QVariantMap dataMap() const;
private:
    QString m_type;
    QVariantMap m_dataMap;

Ahora este enfoque no funciona por varias razones (una de las cuales es que la propiedaddataMap es accesible comodatos en elmodelo infantil, que se reemplaza por la propiedad predeterminadadatos en cualquier tipo de elemento QML). ¿Alguna posible solución a este problema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta