我想使用qml和master-detail界面,但我不知道如何将当前项目传递给detail view right方式。在主视图中的ListView控件使用C++模型(附加与QSqlTableModel的,它的做工精细),我看到两种方式来传递项目:qml + master-detail
与静态名称字段,如QSqlRecord字段名称创建C++类,并将其传递到qml与(w是QDeclarativeView *),但现在我不使用任何这样的类,可以更改我的数据库和qml视图,而无需更改C++代码,我想保存它
创建很多性质在任何细节qml like
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());
设置为从C++代码这个属性(记录 - QSqlRecort在当前行)
有没有解决我的问题任何更简单的方法?
PS我上面写的代码不检查的准确性,并写入,使其更清楚我的意思
UPD
也许这将是有用的人,我发现3-第二种方式,而不是第二种修改 - 你可以将字段封装到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++模型是否已经包含了所有将在详细视图中显示的字段,或者您是否必须为细节视图执行一些额外的数据提取? – JuliusG
模型alredy有所有的字段,我知道哪些字段有当前模型(程序有一些表层次结构,任何表都有他自己的qml视图,在此视图之间转换为C++代码描述)。 – aknew