2010-08-27 47 views
5

我有一個QTreeView與QSortFilterProxyModel之間的視圖和QStandardItemModel排序樹。然後我想通過clicked()信號來處理視圖中的點擊。不能在QTreeView的點擊信號中使用itemFromIndex與QSortFilterProxyModel

的模型/視圖是設置與此類似:

mymodel = new QStandardItemModel(5, 5, this); 
mysort = new MySortProxy(this); 
mysort->setSourceModel(mymodel); 
myview = new QTableView(this); 
myview->setSourceModel(mysort); 
connect(myview, SIGNAL(clicked(QModelIndex)), this, slot(clickAction(QModelIndex))); 

這種設置中的所有作品和我想要的方式排序我的數據。當你點擊一個物品時,clickAction()槽會被點擊物品的索引。然後嘗試從槽中的索引中獲取項目:

void myclass::clickAction(const QModelIndex &index) 
{ 
    QStandardItem *item = mymodel->itemFromIndex(index); 
} 

但是,itemFromIndex返回NULL。

如果我刪除了QSortFilterProxyModel並將該模型直接設置爲視圖中的sourcemodel,則它完全可以正常工作。即

myview->setSourceModel(mymodel); // was setSourceModel(mysort); 

mymodel-> itemFromIndex(指數)現在返回預期的項目,但很明顯,現在我不能用我自己的排序代理。

任何人都可以告訴我我做錯了什麼,當我有一個sortfilter代理到位時,如何在點擊插槽中獲得該項目?

我正在使用Qt-4.3.1。

感謝您的幫助,賈爾斯

回答

12

我相信你想要做的事,如:

void myclass::clickAction(const QModelIndex &index) 
{ 
    QStandardItem *item = mymodel->itemFromIndex(mysort->mapToSource(index)); 
} 
+0

非常感謝您的回答。不幸的是,由於星期一是英格蘭的一個銀行假日,我不能在星期二之前嘗試。然而,你的答案響了很多鍾,我相信會證明是正確的,所以我現在將它標記爲已接受。我會在星期二嘗試它之後更新它。謝謝。 – giles123 2010-08-27 23:14:42

+0

現在已經嘗試過,它工作得很好。謝謝。 – giles123 2010-09-01 09:06:17

相關問題