master-detail インターフェイスで qml を使用したいのですが、現在のアイテムを詳細ビューに正しく渡す方法がわかりません。マスター ビューの ListView は C++ モデル (QSQLTableModel のアドオン、正常に動作します) を使用しており、項目を渡す方法が 2 つあります。
QSqlRecord フィールド名のような静的な名前を持つフィールドを持つ C++ クラスを作成し、
w->rootContext()->setContextProperty()
(w is QDeclarativeView *) を使用して qml に渡しますが、今ではこのようなクラスは使用せず、C++ コードを変更せずにデータベースと qml ビューを変更できます。保存したいqml のような詳細で多くのプロパティを作成します
Rectangle { id: mainRect property alias myFieldName: txt_nominal.text Column { width: parent.width Text { id: txt_nominal font.bold: true } } }
このプロパティを c++ コードから設定して設定します w->rootContext()->setContextProperty(record.fieldName(i),record.field(i).value());
(record - QSqlRecord at current row)
私の問題を解決する簡単な方法はありますか?
PS上記のコードは正確性をチェックしておらず、意味をより明確にするために書かれています
UPD
多分それは誰かにとって役に立つでしょう、私は3番目の方法を発見しました.2番目の変更ではなく、フィールドをQVariantMapにラップし、1つのオブジェクトだけを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
}