2011-03-06 107 views
0

要避免使用QStandardItemModel作爲模型的QListView中的重複項的方法是什麼?數據添加與拖動&下降,所以我試圖覆蓋QStandardItemModel :: dropMimeData,這似乎有點奇怪,因爲我需要重寫QStandardItemModel :: mimeData(和重新編碼數據/ decodeData)以及。這必須更容易!QListView&QStandardItemModel - 防止重複

回答

0

好吧,我設法通過重寫而QListView :: dataChanged,檢查是否有與在模型中的Qt :: DisplayRole相同數據的多個項目下降和刪除後,一個解決這個如果有的話。基本上,它看起來像這樣:

void MyListView::dataChanged(QModelIndex topLeft, QModelIndex bottomRight) 
{ 
    // there can be only one item dragged at once in my use case 
    if(topLeft == bottomRight) 
    { 
     QStandardItemModel* m = static_cast<QStandardItemModel*>(model()); 
     // if theres already another item with the same DisplayRole... 
     if(m->findItems(topLeft.data().toString()).count() > 1) 
     { 
      // ... we get rid of it. 
      model()->removeRow(topLeft.row()); 
     } 
    } 
    else 
    { 
     // let QListView decide 
     QListView::dataChanged(topLeft, bottomRight); 
    } 
} 

這是迄今爲止並不完美(例如,如果你可以一次降一個以上的項目),但它的工作原理對於簡單的用例。