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
Нужно поменять 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));