26.自定義ItemModel中的數(shù)據(jù)結(jié)構(gòu)--Apple的學(xué)習(xí)筆記

一,前言

上一篇25.自定義ItemModel到QTreeview--Apple的學(xué)習(xí)筆記我僅修改了treeitem,treemodel模塊沒有修改,所以treemodel中的回調(diào)函數(shù)到此是什么策略,還是不清楚,所以本次進行深度練習(xí)。

二,需求

自建數(shù)據(jù),通過抽象模塊綁定到treeview顯示,目的是弄明白這些回調(diào)函數(shù)的運行機制。

三,遇到的問題

  1. 固定的二維數(shù)組的數(shù)據(jù)無法正常顯示到treeview
    答:僅能顯示第一層級的重復(fù)數(shù)據(jù)。原因是treeview model必須是鏈表形式的。若數(shù)據(jù)是固定二維數(shù)組直接在model無法找parent和child,若必須要用,則要將其封裝為鏈表形式,并且可以找到child和parent的形式。當(dāng)然若用tableview顯示則不需要parent和child了。

  2. parent和index含義
    答:index是創(chuàng)建子類的,parent創(chuàng)建父節(jié)點的,每個子節(jié)點又可以作為其他的父節(jié)點。若為空說明是主節(jié)點。很簡單的操作方法就是將parent強制設(shè)置為默認值回復(fù),即所有index的父節(jié)點只有一個主節(jié)點了。顯示結(jié)果就是全部掛在父節(jié)點上一行行的顯示了。

  3. data和column及row的含義
    答:data是顯示的最終數(shù)據(jù),一般可以原始數(shù)據(jù)顯示或加些算法再顯示,column和row就是返回當(dāng)前出入節(jié)點總共有幾行和幾列。

四,效果

image.png

a. 創(chuàng)建數(shù)據(jù)內(nèi)容

mytreemodel::mytreemodel(QObject *parent)
    : QAbstractItemModel(parent)
{
    // 創(chuàng)建root節(jié)點
    m_pRootNode = new myitem(nullptr, "rootNode", -1, -1);
    myitem *m_receiveInfo = new myitem(m_pRootNode, "ReceiveMessage", 0, 0);
    myitem *m_replyInfo = new myitem(m_pRootNode, "ReplyMessage", 1, 0);
    m_pRootNode->childNodes.append(m_receiveInfo);
    m_pRootNode->childNodes.append(m_replyInfo);
    myitem *m_relay1Info = new myitem(m_replyInfo, "r1", 0, 0);
    myitem *m_relay2Info = new myitem(m_replyInfo, "r2", 1, 0);
    myitem *m_relay3Info = new myitem(m_replyInfo, "r3", 2, 0);
    m_replyInfo->childNodes.append(m_relay1Info);
    m_replyInfo->childNodes.append(m_relay2Info);
    m_replyInfo->childNodes.append(m_relay3Info);
}

b. 自建數(shù)據(jù)結(jié)構(gòu)

class myitem
{
public:
    myitem(myitem *my, QString s,int row,int col);
    myitem *parent; // 父節(jié)點
    QString sData;  // 自身數(shù)據(jù)
    QVector<myitem*> childNodes; // 子節(jié)點
    int nRow;
    int nCol;
};

五 ,小結(jié)

總的來說,我沒有去看源碼來分析這些需要重寫的函數(shù),這樣的效率就比較慢,算是我一點點嘗試出來的結(jié)果。然后進行理解。網(wǎng)上看了下QT帶源碼調(diào)試也比較容易,只要安裝的時候安裝source,然后配置中為源碼打鉤,調(diào)試的時候就可以帶QT源碼調(diào)試了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容