Вы должны создать QObject
, который имеет Q_PROPERTY
как QQmlListProperty<ShortcutItem>
и DefaultProperty
как Q_PROPERTY
:
shortcutcollection.h
#ifndef SHORTCUTCOLLECTION_H
#define SHORTCUTCOLLECTION_H
#include <QObject>
#include <QVector>
#include <QQmlListProperty>
#include "shortcutitem.h"
class ShortcutCollection: public QObject
{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<ShortcutItem> items READ items)
Q_CLASSINFO("DefaultProperty", "items")
public:
ShortcutCollection(QObject *parent=nullptr);
QQmlListProperty<ShortcutItem> items();
int itemsCount() const;
ShortcutItem *item(int) const;
private:
QList<ShortcutItem*> m_items;
};
#endif // SHORTCUTCOLLECTION_H
shortcutcollection.cpp
#include "shortcutcollection.h"
ShortcutCollection::ShortcutCollection(QObject *parent):
QObject(parent)
{
}
QQmlListProperty<ShortcutItem> ShortcutCollection::items()
{
return QQmlListProperty<ShortcutItem>(this, m_items);
}
int ShortcutCollection::itemsCount() const
{
return m_items.count();
}
ShortcutItem *ShortcutCollection::item(int index) const
{
return m_items.at(index);
}
Затем вы регистрируете его:
qmlRegisterType<ShortcutCollection>("FooModule", 1,0, "Shortcuts");
qmlRegisterType<ShortcutItem>("FooModule", 1,0, "Shortcut");
*. Qml
import QtQuick 2.9
import QtQuick.Window 2.2
import FooModule 1.0 as U
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
U.Shortcuts{
U.Shortcut{
}
U.Shortcut{
}
}
}
Полный пример вы найдете здесь