【发布时间】:2012-11-30 08:52:54
【问题描述】:
我想使用带有主从界面的 qml,但我不知道如何正确地将当前项目传递给详细视图。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,它工作正常),我看到了两种传递项目的方法:
使用静态名称的字段创建 C++ 类,例如 QSqlRecord 字段名称,并使用
w->rootContext()->setContextProperty()(w 是 QDeclarativeView *)将其传递给 qml,但现在我不使用任何这样的类并且可以更改我的数据库和 qml 视图而不更改 c++ 代码,我想保存它-
在任何详细的 qml 中创建很多属性,例如
Rectangle { id: mainRect property alias myFieldName: txt_nominal.text Column { width: parent.width Text { id: txt_nominal font.bold: true } } }
并通过设置w->rootContext()->setContextProperty(record.fieldName(i),record.field(i).value());(记录 - 当前行的 QSqlRecort)从 c++ 代码设置此属性
有没有更简单的方法来解决我的问题?
PS 我上面写的代码没有检查准确性,是为了让我的意思更清楚
UPD
也许它对某人有用,我发现了第三种方式,而不是第二种方式的修改 - 你可以将字段包装到 QVariantMap 中并且只将一个对象传递给 qml。这正是我想要的
在 cpp 中:
QVariantMap testObject;
testObject["testField"]="first string from cpp";
testObject["testField2"]="second string from cpp";
rootContext()->setContextProperty("testObject",testObject);
在 qml 中:
Text {
id: simpleTextt
text: testObject.testField
anchors.centerIn: parent
}
【问题讨论】:
-
您的 c++ 模型是否已经具有将在详细信息视图中显示的所有字段,或者您是否需要为详细信息视图执行一些额外的数据获取?
-
模型已经拥有所有字段并且我知道哪些字段具有当前模型(程序有一些表层次结构,任何表都有他自己的 qml 视图,此视图之间的转换描述为 c++ 代码)。
标签: c++ qt qml master-detail