3

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")) 

その後、最後の4行が永久に繰り返されます(または少なくとも忍耐力を失うまで)。私には、ルートデータがフェッチされているように見えますが、表示されることはありません。data奇妙なことに、 -の最後のパラメーターであるはint role、値13を持ち、これはどの役割としても定義されていません(それでも、有効な文字列を無条件に返します)。

これを実装するときに見逃したことはありますか?

4

1 に答える 1

8

QAbstractItemModel :: data関数は、返すデータに対して可能な限りけちである必要があります。表示ロールと列番号が完全に一致する場合にのみデータを返すようにしてください。他のすべての場合は、無効なQVariantを返すだけで(デフォルトのコンストラクターを呼び出すだけ)、ビューウィジェットはこれらの欠落している値を適切なデフォルトで埋めます。

于 2012-08-31T19:56:11.220 に答える