[英]Qt.binding in a for loop
在TabView
,我試圖從字符串屬性加載Tab
項目列表:
TabView {
id: tabView1
property string tabs: "/etc,/bin"
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
var newTab = tabView1.addTab("", dirTableView);
newTab.active = true;
newTab.item.folderUrl = "file://" + tab_array[i];
newTab.title = Qt.binding(function() {
return newTab.item.folderUrl.toString().replace("file://", "");
});
}
}
Component.onCompleted: {
loadTabs();
}
}
每個Tab
加載目錄內容的TableView
(如dirview.qml
所指定)。
Tab.title
綁定不起作用,因為newTab
在每次迭代中都會重新分配給另一個Tab
,因此結果是所有選項卡的標題都綁定到最后一個選項卡的標題。
我試圖使用數組來存儲TabView.addTab()
返回的不同Tab
:
property var tabArray: []
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
tabArray[i] = tabView1.addTab("", dirTableView);
tabArray[i].active = true;
tabArray[i].item.folderUrl = "file://" + tab_array[i];
tabArray[i].title = Qt.binding(function() {
return tabArray[i].item.folderUrl.toString().replace("file://", "");
});
}
}
但這也不起作用。 顯然,一旦聲明了數組,就會立即觸發Qt.binding()
,但是那時,該數組為空,因此出現錯誤“無法讀取未定義的屬性'item'”(指Qt.binding()
) 。 奇怪的是,在應用程序啟動時以某種方式正確設置了標題,但是當item.folderUrl
在我瀏覽目錄樹時更改時,標題不會相應更新,因此綁定無法正常工作。
在這里的for循環中正確進行Qt.binding
的方法是什么?
只需嘗試再做一件事,它就可以了!
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
var newTab = tabView1.addTab("", dirTableView);
newTab.active = true;
newTab.item.folderUrl = "file://" + tab_array[i];
newTab.title = Qt.binding(function() {
return this.item.folderUrl.toString().replace("file://", "");
});
}
}
唯一的變化是在綁定表達式中, newTab
被this
取代。 靈感來自此 。
顯然,使用this
消除了歧義, Qt.binding()
確切知道要引用哪個newTab
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.