我正在尝试将一个二维 QList 作为 Q_PROPERTY 传递到 QML 中,但是在 QML 中我无法实际访问任何信息。
一些代码:
C++: Q_PROPERTY 在构造函数中由 q_invokable 函数填充:
这返回了这个:
然而,在 QML 中,我只得到了以下内容:
qml: QVariant(QList>)
我无法对其进行任何操作。
我的目标是能够以以下方式从 QML 访问 2D QList:
object.gameArray[0][1] // 返回 "Text"
我可以在普通 QList(没有 2D)中做到这一点。非常感谢您的帮助!
一些代码:
C++: Q_PROPERTY 在构造函数中由 q_invokable 函数填充:
void Class::createNewGameArray(){
QList<QList<QString>> testArray;
for( int i = 0; i < _intervals.size(); ++i) {
QList<QString> innerArray;
testArray.append(innerArray);
testArray[i].append(_intervals[i]);
testArray[i].append("Audio");
}
for( int i = 0; i < _intervals.size(); ++i) {
QList<QString> innerArray;
testArray.append(innerArray);
testArray[i+12].append(_intervals[i]);
testArray[i+12].append("Text");
}
std::random_shuffle(testArray.begin(),testArray.end());
Class::setGameArray(testArray);
emit gameArrayChanged(_newGameArray);
这返回了这个:
(("M7", "Text"), ("M3", "Text"), ("m3", "Text"), ("M6", "Audio"), ("TT", "Audio"), ("P4", "Text"), ("m7", "Audio"), ("m2", "Text"), ("m6", "Audio"), ("m6", "Text"), ("M7", "Audio"), ("P5", "Text"), ("P4", "Audio"), ("m2", "Audio"), ("M2", "Audio"), ("M3", "Audio"), ("P5", "Audio"), ("m3", "Audio"), ("M6", "Text"), ("TT", "Text"), ("m7", "Text"), ("Oct", "Audio"), ("Oct", "Text"), ("M2", "Text"))
我想要的正是这个。
在 main.cpp 中,我设置了 rootContext 如下:
Class object;
QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
context->setContextProperty("object", &object);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
然而,在 QML 中,我只得到了以下内容:
qml: QVariant(QList>)
我无法对其进行任何操作。
我的目标是能够以以下方式从 QML 访问 2D QList:
object.gameArray[0][1] // 返回 "Text"
我可以在普通 QList(没有 2D)中做到这一点。非常感谢您的帮助!
QAbstractItemModel
(QAbstractTableModel
) 中。最简单的方法是使用QQmlListProperty
。 - m7913d