Задать вопрос
Kalombyr
@Kalombyr

QMap в QML как лучше всего сделать?

Доброго дня!
Перевожу проект с виджетов на QML.
Появились свойства (Q_PROPERTY), в которых тип должен быть QMap, нашёл, что можно только либо QVariantMap либо QList, что не подходит или писать обёртки для каждого свойства, что по-моему как-то костыльно.
Разумеется, да же если зарегистрировать тип через qRegisterMetaType, то в QML как с обычным массивом работать я не могу =(
Можно как-либо извернуться, что бы не создавать кучу обёрток по трансформации QMap в QVariantMap и обратно, но что бы в QML можно было работать как с обычным массивом "m[4]=42;" ?
  • Вопрос задан
  • 1337 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Это должно помочь https://stackoverflow.com/questions/24362946/how-c...
Альтернативный вариант doc.qt.io/qt-5/qtcore-tools-customtype-example.html
Ответ написан
Комментировать
PavelK
@PavelK
В общем случае, как уже посоветовали, создать свой собственный тип, но всё равно не получится с ним работать как с массивом m[4]=42; будет что-то вроде m.set(4,42); и к тому же опять придётся скорее всего писать "обёртки", либо перегружать оператор [] и так далее - в зависимости от Вашей ситуации.

Вы можете работать как с обычным массивом через QList, но при этом будут особенности QList - если в QML сделать m[4]=42; то с 0 по 3 список будет заполнен нулями и, возможно, Вам придётся вносить ещё изменения в код для обхода этой особенности.

Вообще, теоретически, можно унаследоваться от QVariant, перегрузив оператор = , что бы выполнить внутри преобразование QMap к QVariantMap , сложить всё это аккуратно в QVariant и перегрузить (), что бы выполнить обратное преобразование. Будет немного трудновато, но вполне возможно. Либо, возможно, заставить думать мета-систему Qt о QMap как о QVariant map.
Ответ написан
Ваш ответ на вопрос

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

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