2013-01-11 103 views
0

我试图删除行与QTreeView则儿童QStandardItemModel

ModelIndexList list = ui->treeView->selectionModel()->selectedRows(); 
uint size = list.size(); 
if (size>0) {   
     for (int i = size - 1; i >= 0; --i) {    
      QModelIndex index = proxyModel->mapToSource(list[i]); 
      standardItemModel->removeRow(index.row()); 
     } 

它将删除那些与子女行,如果我选择根一行。如果我选择某个子树,那么只有root会被删除,并且在尝试再次删除成为根应用程序崩溃的子项之后。

+0

我想你应该添加你的答案并接受它。现在很难读出这个问题,因为很难说出什么问题以及哪些问题。 – andr

回答

0

我在removeRow函数中缺少父参数。正确的代码在这里:

ModelIndexList list = ui->treeView->selectionModel()->selectedRows(); 
uint size = list.size(); 
if (size>0) {   
    for (int i = size - 1; i >= 0; --i) {    
     QModelIndex index = proxyModel->mapToSource(list[i]); 
     standardItemModel->removeRow(index.row() 
       /*I was missing this -->*/ , index.parent()); 
    }