我在视图和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)