QModelIndex ::数据不起作用

时间:2013-12-15 19:35:44

标签: c++ qt qt5 qtreeview qtgui

我的应用程序中有一个带有数据模型的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);
}

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。

我替换了这段代码:

return QVariant(resource);

使用此代码:

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

似乎按预期工作。我猜数据()方法正在执行,但由于某种原因没有触发断点。

答案 1 :(得分:0)

您应该添加Q_DECLARE_METATYPE(QSharedPointer<GMResource>)以便能够在QSharedPointer<GMResource>中填写QVariant