QModelIndex::数据不工作



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

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

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

任何帮助都将不胜感激

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

我替换了这个代码:

return QVariant(resource);

使用此代码:

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

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

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

相关内容

  • 没有找到相关文章