我具有由Node
S和Edge
小号表示的图形和我写一个适配器,所以我可以以表格形式使用Qt的标准视图,像这样查看图表:存储两种不同类型的在QModelIndex
Node1
-Edge1
-Node2
-Edge2
-Node3
-Edge3
-Node1
Node2
Node3
-Edge4
-Node1
我这样做是利用重载为QAbstractItemModel::createIndex
存储或者一个索引位置(quintptr
过载)或指向正确的项目(void*
过载)。然而,这是愚蠢的,因为它实际上并不重要,因为它总是只有一个值,只为QModelIndex::internalPointer()
和QModelIndex::internalID()
转换。不用说,它会在某些情况下造成冲突,导致模型崩溃,这就是我发现这是一个坏主意的原因。
现在我不能找出作为第三变量存储在QModelIndex
,这样我可以区分:
1)索引点下一些节点
2)索引指向一个到边缘下一些边缘
空值节点当前正被“用过的”识别顶层节点。在这两种情况下我应该存储什么来可靠地识别父母?有没有办法在QModelIndex
中存储两种不同的“事物”(除了“无”和“某种类型的东西”)?
我不知道我怎么可以创建一个唯一的ID,使其从ID本身,它指向的是一个节点或边缘加在哪里可以找到它的信息明显。我确实有ID,但是它们是指向找到该项目的相应位置的索引,但不知道该对象是什么(节点或边缘)。到目前为止,我唯一的想法是创建基类,它可以告诉我这种差异(使用bool成员)和基于此的static_cast。 – Resurrection