【问题标题】:QModelIndex::data not workingQModelIndex::数据不工作
【发布时间】:2013-12-15 19:35:43
【问题描述】:

我的应用程序中有一个带有数据模型的 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() 派生类的data() 方法:

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

任何帮助将不胜感激

【问题讨论】:

    标签: c++ qt qt5 qtreeview qtgui


    【解决方案1】:

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

    我替换了这段代码:

    return QVariant(resource);
    

    使用此代码:

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

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

    【讨论】:

    • 不确定,但我猜树线相当于QVariant::fromValue(resource);。这不等于QVariant(resource) 的问题是没有模板化的构造函数,所以它会被转换成别的东西(但我不知道是什么),这将导致不同的类型。 fromValue是模板化的(虽然可以推导出来),所以获取类型并存储在QVariant中。
    【解决方案2】:

    你应该添加Q_DECLARE_METATYPE(QSharedPointer&lt;GMResource&gt;) 来包裹QSharedPointer&lt;GMResource&gt; 输入QVariant

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多