其他分享
首页 > 其他分享> > c – QTreeView不显示数据

c – QTreeView不显示数据

作者:互联网

我从QAbstractItemModel派生来编码我自己的数据树,但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")) 

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

实施这个时我有什么遗漏的吗?

解决方法:

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

标签:c,qt,qabstractitemmodel
来源: https://codeday.me/bug/20190729/1571517.html