我尝试列出从QStringList
到QML的项目,但我一直收到绑定的未定义错误。
这是C ++代码:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QStringList lst;
QString m("item 1");
lst.append(m);
QQmlComponent comp(&engine);
QQmlContext *ctx = engine.rootContext();
ctx->setContextProperty("pLst", QVariant::fromValue(lst));
return app.exec();
}
以下是QML代码:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
ApplicationWindow {
id: root; objectName: "root"
title: qsTr("Doesn't Matter")
width: 640
height: 480
visible: true
ListView{
id: lst
model: pLst
}
}
错误说pLst
未定义。
答案 0 :(得分:2)
这是因为您在之前调用了load()
设置了上下文属性,因此pLst
正在构建时ListView
尚不存在。
在设置用于初始化QML对象的上下文属性后,您应该在之后调用load()
。