我的应用程序中有一个带有数据模型的QTreeView。我正在捕捉使用以下插槽双击项目的时间:
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 )。
下面是我的data()派生类的QStandardItem方法:
virtual QVariant data( int role) const {
if (role==Qt::UserRole) {
return QVariant(resource);
}
return QStandardItem::data(role);
}任何帮助都将不胜感激。
发布于 2013-12-15 21:19:25
我找到了解决问题的办法。
我替换了这个代码:
return QVariant(resource);使用此代码:
QVariant r;
r.setValue<QSharedPointer<GMResource> >(resource);
return r;似乎像预期的那样正常工作。我猜想data()方法正在执行,但由于某种原因没有触发断点。
发布于 2013-12-15 21:58:19
您应该将Q_DECLARE_METATYPE(QSharedPointer<GMResource>)添加为abe,以便在QVariant中包装QSharedPointer<GMResource>类型
https://stackoverflow.com/questions/20598829
复制相似问题