2013-12-15 74 views
0

我的应用程序中有一个QTreeView和一个数据模型。我在拍摄时,项目双,符合以下插槽点击:QModelIndex :: data不起作用

void MainWindow::on_treeView_doubleClicked(const QModelIndex &index) 
{ 
    if (index.parent().isValid()) { 
     QSharedPointer<GMResource> resource; 

     resource = index.data(Qt::UserRole).value<QSharedPointer<GMResource> >(); 
     Workspace::GetSingleton()->OpenResourceEditor(resource); 
    } 
} 

我预计QModelIndex::data()方法(执行和)返回底层QStandardItem::data()由该索引引用的项目,但其不返回任何东西。我在QStandardItem::data()方法中设置了一个断点,它甚至没有被调用,所以我可能错误地认为QModelIndex::data()实际返回。

如何访问由QModelIndex引用的项目数据(例如,访问我添加到模型中的原始QStandardItem)。

这是我为我的QStandardItem派生类data()方法:

virtual QVariant data(int role) const { 
    if (role==Qt::UserRole) { 
      return QVariant(resource); 
    } 
     return QStandardItem::data(role); 
} 

任何帮助,将不胜感激

回答

0

我找到了解决问题的办法。

我更换验证码:

return QVariant(resource); 

有了这个代码:

QVariant r; 
r.setValue<QSharedPointer<GMResource> >(resource); 
return r; 

似乎是工作的预期。我猜data()方法正在执行,但由于某些原因,断点没有被触发。

+1

不知道,但我想这树线等同于'的QVariant :: fromValue(资源);'。 QVariant(resource)不等同于QVariant(resource)的问题在于没有模板化的构造函数,所以它会被转换成其他的东西(但我不知道是什么),这会导致不同的类型。 'fromValue'是模板化的(尽管可以推导出),所以类型被获取并存储在QVariant中。 – leemes

0

您应该添加Q_DECLARE_METATYPE(QSharedPointer<GMResource>)是安倍包QSharedPointer<GMResource>QVariant

相关问题