2010-04-17 4 views
0

사용자가 언제든지 새로운 데이터를 QTreeModel에 추가 할 수있는 앱을 만들고 있습니다. 부모가 놓이는 부모는 자동으로 확장되어 새 항목을 표시합니다.Qt : QSortFilterProxyModel을 사용할 때 새 QTreeView 항목의 부모를 자동 확장하는 방법

self.tree = DiceModel(headers) 
self.treeView.setModel(self.tree) 
expand_node = self.tree.addRoll() 
#addRoll makes a node, adds it, and returns the (parent) note to be expanded 
self.treeView.expand(expand_node) 

이것은 원하는대로 작동합니다. 믹스에 QSortFilterProxyModel을 추가하면 :

self.tree = DiceModel(headers) 
self.sort = DiceSort(self.tree) 
self.treeView.setModel(self.sort) 
expand_node = self.tree.addRoll() 
#addRoll makes a node, adds it, and returns the (parent) note to be expanded 
self.treeView.expand(expand_node) 

부모가 더 이상 확장되지 않습니다. 내가 뭘 잘못하고 있는거야?

답변

2

확장 항목을 확장하기 전에 확장 항목 색인을 프록시 모델 항목 색인에 매핑해야한다고 생각합니다. QSortFilterProxyModel::mapFromSource 메소드는 필요한 것을 처리해야합니다. 이 도움이

// create models 
QStandardItemModel* model = new (QStandardItemModel); 
QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this); 
proxyModel->setSourceModel(model); 

// set model 
ui->treeView->setModel(proxyModel); 
ui->treeView->setSortingEnabled(true); 

// generate items 
QStandardItem* parentItem0 = model->invisibleRootItem(); 
QModelIndex index = parentItem0->index(); 
for (int i = 0; i < 4; ++i) 
{ 
    QStandardItem* item = new QStandardItem(QString("new item %0").arg(i)); 
    parentItem0->appendRow(item); 
    parentItem0 = item; 

    // expand items using proxyModel->mapFromSource 
    ui->treeView->expand(proxyModel->mapFromSource(item->index())); 
    // line below doesn't work for you 
    //ui->treeView->expand(item->index()); 
} 

희망

관련하여, 아래의 예는 (그것의의 C++ 파이썬으로 변환하는 문제가 발생하는 경우 알려 주시기) 당신을 위해 일하는 것이 있는지 확인하십시오
관련 문제