我想将 qml 与主从接口一起使用,但我不知道如何以正确的方式将当前项目传递到详细视图。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,工作正常),我看到两种传递项目的方法:
使用具有静态名称(如 QSqlRecord 字段名称)的字段创建 C++ 类,并将其传递给 qml w->rootContext()->setContextProperty()(w 是 QDeclarativeView *),但现在我不使用这样的任何类,并且可以更改我的数据库和 qml 视图,而无需更改 C++ 代码,我想要保存它
在任何细节 qml 中创建很多属性,例如
Rectangle {
id: mainRect
property alias myFieldName: txt_nominal.text
Column {
width: parent.width
Text {
id: txt_nominal
font.bold: true
}
}
}
Run Code Online (Sandbox Code Playgroud)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);
Run Code Online (Sandbox Code Playgroud)
在 qml 中:
Text { …Run Code Online (Sandbox Code Playgroud)