LINUX.ORG.RU

Qml доступ к QVariant из QPair / std::pair

 , ,


0

1

Qml доступ к QVariant из QPair / std::pair

Добрый день.

Qt 6.3.2

Есть код, который добавляет в Qml объект из C++ кода:

QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
QList<QPair<QString, QString>> titlesTexts;
titlesTexts.append(qMakePair("title 0", "text 0"));
titlesTexts.append(qMakePair("title 1", "text 1"));
titlesTexts.append(qMakePair("title 2", "text 2"));
titlesTexts.append(qMakePair("title 3", "text 3"));
titlesTexts.append(qMakePair("title 4", "text 4"));
context->setContextProperty("titlesTexts", QVariant::fromValue(titlesTexts));

Далее в коде Qml пытаюсь прочитать данный список:

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Component.onCompleted: {
        console.log("Program was caled")

        for (var key in titlesTexts) {
            var item = titlesTexts[key]
            console.log(item)
            console.log(item.first, item.second)
        }
    }
}

При этом получаю вывод:

qml: Program was caled
qml: QVariant(std::pair<QString,QString>, std::pair("title 0","text 0"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 1","text 1"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 2","text 2"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 3","text 3"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 4","text 4"))
qml: undefined undefined

Как бы получить доступ к элементам внутри пар?

Решено

Спасибо @aol

Ссылки с информацией:

https://forum.qt.io/topic/87558/qlist-of-qpair-in-qml

https://www.qtcentre.org/threads/57397-What-is-the-associate-type-of-QList-lt-QPair-lt-double-QString-gt-gt-in-qml

Нужно поменять qml код так:

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Component.onCompleted: {
        for (var key in titlesTexts) {
            var item = titlesTexts[key]
            console.log(item.title, item.text)
        }
    }
}

Код С++:

QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
QVariantList titlesTexts;
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 0"}, {"text", "text 0"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 1"}, {"text", "text 1"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 2"}, {"text", "text 2"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 3"}, {"text", "text 3"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 4"}, {"text", "text 4"}})));
context->setContextProperty("titlesTexts", QVariant::fromValue(titlesTexts));
★★★★★

Последнее исправление: rumgot (всего исправлений: 3)

https://www.qtcentre.org/threads/57397-What-is-the-associate-type-of-QList-lt-QPair-lt-double-QString-gt-gt-in-qml

There is very likely not exactly matching JavaScript type.
In which case you’ll have to find a better way of presenting the data.

QVariantMap - твой бро, судя по форме данных )

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)