2012-08-31 52 views
2

我已经从QAbstractItemModel派生编码我自己的数据树,但QTreeView没有显示。QTreeView不显示数据

大多数我看到了,因为错误的变量续航时间得到了解决类似问题的答案,所以这里是我的模型的配置代码:

ui.tvHierarchy->setModel(
    new MetaHierarchyModel(
     cutOffExtension(
      fileName.toStdString() 
     ) 
    ) 
); 

在建筑模型得到充满根节点数据和稍后应根据需要加载更多数据(通过fetchMore)。

我开始输出每个被调用的函数。这是一个日志调用序列:

columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
canFetchMore(QModelIndex(-1,-1,0x0,QObject(0x0)))) 
    return false 
rowCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
hasChildren(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return true 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 

roleNames()输出:

QHash((0, "display")(1, "decoration")(2, "edit")(3, "toolTip")(4, "statusTip")(5, "whatsThis")) 

最后四行然后永远重复(或者至少要等到我失去了我的耐心)。 对我来说,它看起来像获取了根数据,但它们永远不会显示。奇怪的是,data的最后一个参数int role的值是13,它没有被定义为任何角色(我仍然无条件地返回有效字符串)。

执行此操作时有什么我错过了吗?

+0

作为一项规则,您希望在从'data'函数返回值时尽可能保持吝啬。如果你检查[文档](https://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum),你可以看到角色13是'Qt :: SizeHintRole' - 我会想象一下当你返回一个字符串时你的视图变得相当困惑! –

+0

@XavierHolt你是对的。当它仅仅在DisplayRole和一个'QVariant()'else返回时,我改变了它。据推测,当时我有另一个错误,现在一直有这个问题。你能否把它作为答案张贴,所以我可以标记它是正确的? – Nobody

+0

太棒了!很高兴工作 - 我会在一分钟内回复。 –

回答

6

QAbstractItemModel::data函数对返回的数据应该尽可能地小气。确保只有在display role和列号完全匹配时才返回数据。在所有其他情况下,只返回一个无效的QVariant(只是调用默认构造函数),并且您的视图控件将用合理的默认值填充这些缺失的值。