У меня очень простой класс с 2 свойствами;ключ и значение:
KeyValue.h:
class KeyValue : public QObject
{
Q_OBJECT
Q_PROPERTY(QString key READ getKey WRITE setKey NOTIFY keyChanged)
Q_PROPERTY(QString value READ getValue WRITE setValue NOTIFY valueChanged)
public:
KeyValue(const QString& key, const QString& value, QObject* parent = 0);
signals:
void keyChanged();
void valueChanged();
private:
QString _key;
QString _value;
QString getKey() const;
QString getValue() const;
void setKey(const QString& key);
void setValue(const QString& value);
};
Q_DECLARE_METATYPE(KeyValue)
В другом классе я хотел бы свойство, содержащее список объектов KeyValue, поэтому я могу использовать этот списоккак модель в QML.
Controller.h
class Controller : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<KeyValue*> items READ getItems NOTIFY itemsChanged)
public:
explicit Controller(QObject* parent = 0);
signals:
void itemsChanged();
private:
QList<KeyValue*> getItems() const;
};
Я хочу использовать это в QML следующим образом:
import QtQuick 2.7
import customqml 1.0
Item{
Controller{
id: controller
}
Repeater{
model: controller.items
Text{
text: modelData.key + ": " + modelData.value
}
}
}
Оба класса зарегистрированы в моем файле main.cpp:
qmlRegisterType<KeyValue>("customqml", 1, 0, "KeyValue");
qmlRegisterType<Controller>("customqml", 1, 0, "Controller");
Приведенный выше код не работает, потому что, очевидно, я не могу напрямую открыть QList для QML.Я пытался использовать QAbstractItemModel и QQmlListProperty, но мне не удалось заставить его работать.Кто-нибудь может указать мне правильное направление?
Мои основные проблемы - это тип свойства items в классе Controller и возвращаемое значение метода getItems .
Я использую Qt 5.9, если это что-то меняет.