2016-06-08 70 views
0

我創建了一個虛擬的ListModel,我加載到的TableView:QML的TableView與委託複選框有問題,顯示

  ListModel{ 
       id: testModel 

       ListElement{ 
        status: false; 
       } 
      }  

      function testFunction() 
      { 
       for(var i=0;i<45;i++) 
       { 
        testModel.append({}); 
       } 
      } 

      TableView 
      { 
       id: idTPTable  
       height: 90 
       width: 150     
       model: testModel 
       z:-1 

       TableViewColumn { 
        role: "status" 
        title: "Activation On/Off" 
        heigth: 150  
        width: 100 
        delegate: Checkbox{ 
         id: idDelegatedCheckbox 
        }   
       }   
      } 

我假裝使用委派CheckBox組件選擇TableView中的項目。

我檢查的第一項表中以下列方式:

First item selected

然後我向下滾動,並返回到頂部,我已經選擇了消失,其他項目選擇的項目。

Diferent item selected

你知道爲什麼嗎?

在此先感謝。

+1

嗯,我覺得是,引用文檔,那**「出於性能的考慮,創建代表可以跨多個錶行回收。這意味着當你使用隱式屬性如styleData.row或model時,這些值可以在委託構造完成後改變。「** – BaCaRoZzo

回答

1

TableView代表根據需要被實例化,並且可以在任何時候被回收或銷燬。與任何Qt Quick項目視圖(ListViewGridViewPathViewTableView ...)一樣,永遠不應將狀態存儲在委託中。因此,您的CheckBox委託必須存放它的「檢查」中的模型狀態:

delegate: Checkbox { 
    id: idDelegatedCheckbox 
    checked: model.checked // read from the model when created or recycled 
    onCheckedChanged: model.checked = checked // write to the model when checked or unchecked 
}