我想使用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