不能在QTreeFilterProxyModel的QTreeView的单击信号中使用itemFromIndex

时间:2010-08-27 17:29:59

标签: qt

我在视图和QStandardItemModel之间有一个带有QSortFilterProxyModel的QTreeView来对树进行排序。然后我想通过clicked()信号对视图中的点击进行操作。

模型/视图的设置类似于:

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(index)现在按预期返回项目,但显然现在我无法使用自己的排序代理。

任何人都可以告诉我我做错了什么以及当我有一个sortfilter代理时我如何在点击位置获取该项目?

我正在使用Qt-4.3.1。

感谢任何帮助,Giles

1 个答案:

答案 0 :(得分:14)

我相信你想做点什么:

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