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

gil*_*123 6 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)));
Run Code Online (Sandbox Code Playgroud)

这个设置都可以按照我想要的方式对我的数据进行排序和排序.单击某个项目时,将调用clickAction()槽,并单击该项目的索引.然后我尝试从插槽中的索引中获取项目:

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

但是,itemFromIndex返回NULL.

如果我删除了QSortFilterProxyModel并将模型直接设置为视图中的sourcemodel,那么一切都可以正常工作.即

myview->setSourceModel(mymodel);    // was setSourceModel(mysort);
Run Code Online (Sandbox Code Playgroud)

mymodel-> itemFromIndex(index)现在按预期返回项目,但显然现在我无法使用自己的排序代理.

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

我正在使用Qt-4.3.1.

感谢您的帮助,Giles

Arn*_*nce 14

我相信你想做的事情如下:

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