2013-07-15 163 views
2

我試圖在QML中動態創建Tab。下面的代碼是我想要做的一個簡單例子。如預期以qml動態添加選項卡

import QtQuick 2.0 
import QtQuick.Controls 1.0 

ApplicationWindow{ 
    id:win 

    TabView{ 
     id:tb 
     anchors.fill:parent 

     MouseArea{ 
      anchors.fill:parent 
      onClicked:tb.loadTab() 
     } 

     Component{ 
      id:viewComp 
      Rectangle{ 
       anchors.fill:parent 
       color:"black" 
      } 
     } 

     function loadTab(){ 
      var t=addTab("x",viewComp) 
      t.item.color="blue" //line 20 
     } 
    } 
} 

第一Tab作品的加入。然而,添加任何其他Tab後觸發錯誤:

TypeError: Cannot set property 'color' of null`.

我試圖訪問TabgetTab()改變顏色,但我得到了同樣的錯誤。有人能解釋我做錯了什麼嗎?

回答

3

終於繞過了,並試圖解決這個問題,並取得了成功。決定發佈一個答案,以防有人在谷歌上發現這個問題並有類似問題。

解決方法是將currentIndex設置爲新的Tab,然後設置Tab的屬性。這意味着功能loadTab()看起來像這樣:

loadTab(){ 
    var c_tab=currentIndex 
    var t=tb.addTab("x",viewComp) 
    currentIndex=count-1 
    t.item.color="blue" 
    currentIndex=c_tab 
} 

這很好用。

+1

還應當指出的是'Tab'從'Loader'繼承:該組件延遲初始化。設置索引強制'Loader'加載組件,因爲它變得可見。另一種解決方案是設置'active:true'來強制加載,即使'Tab'不可見,即'currentIndex'沒有設置爲新創建的'Tab'。 – BaCaRoZzo

0

更好的解決方案:

loadTab(){ 
    var c_tab=currentIndex 
    var t=tb.addTab("x",viewComp) 
    t.active = true;// real loading 
    t.item.color="blue" 
}