簡體   English   中英

在QModelIndex中存儲兩種不同的類型

[英]Storing two different types in QModelIndex

我有一個由NodeEdge表示的圖形,並且編寫了一個適配器,因此可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM