我在视图和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
答案 0 :(得分:14)
我相信你想做点什么:
void myclass::clickAction(const QModelIndex &index)
{
QStandardItem *item = mymodel->itemFromIndex(mysort->mapToSource(index));
}