我的应用程序中有一个带有数据模型的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);
}
非常感谢任何帮助
答案 0 :(得分:0)
我找到了问题的解决方案。
我替换了这段代码:
return QVariant(resource);
使用此代码:
QVariant r;
r.setValue<QSharedPointer<GMResource> >(resource);
return r;
似乎按预期工作。我猜数据()方法正在执行,但由于某种原因没有触发断点。
答案 1 :(得分:0)
您应该添加Q_DECLARE_METATYPE(QSharedPointer<GMResource>)
以便能够在QSharedPointer<GMResource>
中填写QVariant