[英]QML: modifying a property of a Child object that is defined in a different QML file (not main.qml)
基本上,我有這樣的東西:
Main.qml:
ApplicationWindow{
width: 500
height: 500
Page{
id: page0
DataPage{
id: datapage0
}
}
}
DataPage.qml:
Page{
id: displayPage
DataDisplay{
id: dataShow
}
}
DataDisplay.qml:
Label{
text: "data: "
}
TextArea{
id: dataArea
text: ""
}
我已經刪除了我認為不相關的內容(例如錨點,高度,寬度等)。 現在,在main.qml中,我有一個來自c ++后端的信號:
Connections{
target: modb
onPostData: {
page0.datapage0.dataShow.dataArea.text = string;
}
我收到以下錯誤:TypeError:無法讀取未定義的屬性'dataArea'
因此,我想問:如何將信號連接到DataDisplay.qml中定義的子對象? 我可以使用信號將信息獲取到main.qml中,但是似乎無法取消引用子對象
編輯:
main.cpp:
QQmlContext* ctx0 = engine.rootContext();
ctx0->setContextProperty("ark", &ark);
QQmlContext* ctx1 = engine.rootContext();
ctx1->setContextProperty("comm", ark.comm);
QQmlContext* ctx2 = engine.rootContext();
ctx2->setContextProperty("modb", ark.modb);
這就是我設置Context的方式(如您所見,共有3個類)。 我可以從這三個中的任何一個獲取信號到main.qml中,也可以在這三個中的任何一個中獲取呼叫槽; 我尚未嘗試從其他qml文件中的c ++類調用插槽,但是我認為它會起作用,因為我可以從子級訪問父級的屬性
正如您確實假定的那樣,您也可以在其他modb
中使用modb
變量,因為它已添加到rootContext
。 我建議這個選擇。
您可以嘗試的另一種選擇是只使用dataArea.text = string
因為id遍地都是(畢竟是javascript),在這種情況下,您應該使用強id。
另一個選擇是定義property alias
,以將字符串傳遞給對象( 請參閱Qt docs )。 或使用property string
,但這還需要更多工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.