[英]Storing two different types in QModelIndex
我有一個由Node
和Edge
表示的圖形,並且編寫了一個適配器,因此可以使用Qt標准視圖以表格形式查看該圖形,如下所示:
Node1
-Edge1
-Node2
-Edge2
-Node3
-Edge3
-Node1
Node2
Node3
-Edge4
-Node1
我利用QAbstractItemModel::createIndex
的重載來存儲索引位置( quintptr
重載)或指向正確項的指針( void*
重載)。 但這是愚蠢的,因為實際上使用的重載實際上並不重要,始終只有一個值可以同時為QModelIndex::internalPointer()
和QModelIndex::internalID()
。 不用說,它會導致沖突,在某些情況下會使模型崩潰,這就是我發現這是一個壞主意的方式。
現在,我無法弄清楚在QModelIndex
什么存儲為第三個變量,因此我可以區分以下兩者:
1)索引指向某個節點下的邊
2)索引指向某個邊緣下的節點
空值當前正在“用於”標識頂級節點。 在這兩種情況下,我應該存儲什么以可靠地識別父級? 有沒有辦法在QModelIndex
存儲兩種不同的“事物”(“無”和“一種類型的事物”除外)?
將圖形創建為單獨的數據結構。 您的節點和邊緣對象將具有唯一的ID 。 並且比在QModelIndex
內使用此ID。
編輯1:如何從邊緣區分節點。
class CGraphElement
{
public:
enum Type
{
Node,
Edge
}
CGraphElement(Type type) : m_type(type) {}
bool isNode() const { return m_type == Node; }
bool isEdge() const { return m_type == Edge; }
private:
Type m_type;
};
// container mapping ID to graph Element (Node or Edge)
std::map<int, CGraphElement> mapId2Element;
void functionDealingWithModelIndex(const QModelIndex & index)
{
int id = index.internalID();
CGraphElement* element = mapId2Element[id];
if (element->isEdge())
qDebug() << "Edge";
else if (element->isNode())
qDebug() << "Node";
}
簽出QVariant和(也許) qRegisterMetaType 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.