首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QModelIndex::数据不工作

QModelIndex::数据不工作
EN

Stack Overflow用户
提问于 2013-12-15 19:35:43
回答 2查看 332关注 0票数 0

我的应用程序中有一个带有数据模型的QTreeView。我正在捕捉使用以下插槽双击项目的时间:

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
virtual QVariant data( int role) const {
     if (role==Qt::UserRole) {
            return QVariant(resource);
     }
        return QStandardItem::data(role);
}

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-15 21:19:25

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

我替换了这个代码:

代码语言:javascript
复制
return QVariant(resource);

使用此代码:

代码语言:javascript
复制
 QVariant r;
 r.setValue<QSharedPointer<GMResource> >(resource);
 return r;

似乎像预期的那样正常工作。我猜想data()方法正在执行,但由于某种原因没有触发断点。

票数 0
EN

Stack Overflow用户

发布于 2013-12-15 21:58:19

您应该将Q_DECLARE_METATYPE(QSharedPointer<GMResource>)添加为abe,以便在QVariant中包装QSharedPointer<GMResource>类型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20598829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档