我有一个 QTreeView,在视图和 QStandardItemModel 之间有一个 QSortFilterProxyModel 来对树进行排序。然后我想通过 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 并将模型直接设置为视图中的源模型,那么一切都会完美运行。 IE。
myview->setSourceModel(mymodel); // was setSourceModel(mysort);
mymodel->itemFromIndex(index) 现在按预期返回项目,但显然现在我无法使用自己的排序代理。
谁能告诉我我做错了什么以及当我有排序过滤器代理时如何在点击槽中获取该项目?
我正在使用 Qt-4.3.1。
感谢您的帮助,贾尔斯