C :
資料庫 C 物件作為背景關系屬性公開給 QML。
資料庫 C 物件有一個方法 getDbpointObject() 回傳指向 databasePoint C 物件的指標。
databasePoint C 物件有一個名為 cppProp 的屬性。
主.cpp:
// expose database object to qml
database databaseObj;
engine.rootContext()->setContextProperty("database", (QObject*)&databaseObj);
// register databasePoint class
qmlRegisterType<databasePoint>("DBPoint", 1, 0, "DBPoint");
資料庫.h:
databasePoint *database::getDbpointObject()
資料庫點.h:
Q_PROPERTY(QVariant cppProp READ cppProp WRITE setcppProp NOTIFY cppPropChanged)
QML:
qmlComp 是一個自定義的 QML 組件。
qmlComp 有一個名為 qmlCompProp 的 QML 屬性。
在 qmlComp 創建完成后,databasePoint c 物件被分配給 qmlCompProp。
qmlComp.qml:
Item
{
property var qmlCompProp: ({}) // qml property
Component.onCompleted:
{
qmlCompProp = database.getDbpointObject() // qml property holds the databasePoint c object
}
}
問題:
在binding.qml 中,QML 屬性bindProp 系結到myQmlComp.qmlCompProp.cppProp
這個系結安全嗎?
系結會一直解決嗎?
databasePoint c 物件在 Component.onCompleted 中分配給 qmlCompProp。在此之前, qmlCompProp 是一個空物件。它會影響系結解析度嗎?
binding.qml 中屬性評估的順序會影響系結解析度嗎?
系結.qml:
property int bindProp: myQmlComp.qmlCompProp.cppProp // is this binding safe?
qmlComp{id: myQmlComp}
uj5u.com熱心網友回復:
是的,理論上應該是安全的。系結直到物件存在才發生,并且直到Component.onCompleted()退出之后才存在。該值將被決議,系結將被維護,除非您破壞它,并且屬性的順序應該無關緊要。
uj5u.com熱心網友回復:
Qt 支持的回復:
在 binding.qml 中,QML 屬性 bindProp 系結到 myQmlComp.qmlCompProp.cppProp 這個系結安全嗎?
好像。
系結會一直解決嗎?
假設沒有參考問題,是的
databasePoint c 物件在 Component.onCompleted 中分配給 qmlCompProp。在此之前, qmlCompProp 是一個空物件。它會影響系結解析度嗎?
這種情況應該有效。然而,在這種情況下,系結最初是為空物件創建的(取決于這一切是如何實體化的),然后在 onCompleted 之后,它更新系結以參考那個真正的 cppProp(而不是它為空物件創建的虛擬物件) )。
binding.qml 中屬性評估的順序會影響系結解析度嗎?
至少在這種情況下不是。如果系結有其他相關屬性,則可能會遇到一些問題,例如,如果中間有一個陣列并且其索引是另一個屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378505.html
