PavelK
@PavelK

Как передать QHash в qml?

Приветствую!
Попытался сделать, как пишут в мане:

typedef   QHash<int, QObject*> TControllers;
Q_DECLARE_METATYPE(TControllers)
TControllers controllers;
controllers.insert(0, myObject);
QObject * r = engine.rootObjects().at(0);
r->setProperty("controls", QVariant::fromValue(controllers));


В qml
id: main
property var controls;
    MouseArea {
        anchors.fill: parent
        onClicked:  {
            console.log(main.controls);
            for (var p in main.controls) {
              console.log("control", p, main.controls[p]);
            }
        }
    }


Выводит только:
qml: QVariant(TControllers)

Как добиться работы, не конвертируя в другие типы?
  • Вопрос задан
  • 661 просмотр
Решения вопроса 1
Rudmz
@Rudmz
ATM, SST.
QHash не унаследован от QObject, поэтому просто так его использовать в QML не получится, т.к. интеграция C++/QML работает через метаобъектную систему Qt.
Можно написать унаследованный от QObject класс-обертку для хэша, реализующий его свойства и методы через Q_PROPERTY, Q_INVOKABLE и публичные слоты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы