簡體   English   中英

在for循環中的Qt.binding

[英]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://", "");
        });
    }
}

唯一的變化是在綁定表達式中, newTabthis取代。 靈感來自

顯然,使用this消除了歧義, Qt.binding()確切知道要引用哪個newTab

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM