QAbstractItemModel使用樣例與解析

2021-08-07 12:17:24 字數 2220 閱讀 3461

(owed by: 春夜喜雨

參考:qt原始碼

qstandarditemmodel_p.h

qstandarditemmodel.h

qstandarditemmodel.cpp

qabstractitemmodel.h

qabstractitemmodel.cpp

qabstractitemmodel是乙個介面類,使用時需要從它繼承下來,實現相關的函式後使用。

不同於qstandarditemmodel,使用qabstractitemmodel的話,需要自己構造樹形結構資料,並在虛函式中返回對應的值。

當然,簡單使用的話,也可以快速構造出沒有父節點的簡單**結構。

形如根節點下列了幾排幾列子節點的**情形。

需要繼承的類有:

class historymodel : public qabstractitemmodel

;

實現幾排幾列**情形的例子:

historymodel::historymodel(qobject *parent /*= 0*/)

: qabstractitemmodel(parent)

qmodelindex historymodel::index(int row, int column, const qmodelindex &parent /*= qmodelindex()*/) const

qmodelindex historymodel::parent(const qmodelindex &child) const

int historymodel::rowcount(const qmodelindex &parent /*= qmodelindex()*/) const

return 0;

}int historymodel::columncount(const qmodelindex &parent /*= qmodelindex()*/) const

qvariant historymodel::data(const qmodelindex &index, int role /*= qt::displayrole*/) const

進一步使用,新增樹形結構,自己構造樹形結構資料:

struct nodeinfo

};

生成如下的這種介面:兩個level=1節點,每個節點下有一些資料

可以這樣來做:

每個節點儲存乙個nodeinfo資訊,這樣

每個節點可以查詢子節點數量

每個節點可以查詢到自身資料

可以根據nodeinfo資訊(row/col/this)獲取到qmodeindex

資料構造時,形成nodeinfo的樹形層次

qabstractitemmodel的介面中,index函式中繫結nodeinfo

qabstractitemmodel的其它介面中,查詢nodeinfo並使用

historymodel::historymodel(qobject *parent /*= 0*/)

: qabstractitemmodel(parent)

qmodelindex historymodel::index(int row, int column, const qmodelindex &parent /*= qmodelindex()*/) const

else}}

return qmodelindex();

}qmodelindex historymodel::parent(const qmodelindex &child) const

}return qmodelindex();

}int historymodel::rowcount(const qmodelindex &parent) const

else

}int historymodel::columncount(const qmodelindex &parent /*= qmodelindex()*/) const

qvariant historymodel::data(const qmodelindex &index, int role /*= qt::displayrole*/) const

else if (role == qt::displayrole)

else

}else

}

(owed by: 春夜喜雨

rapidjson使用樣例

rapidjson預設支援的字元格式是utf 8的,一般中間介面是json檔案的話儲存為utf 8比較通用一些。如果是unicode的需要轉換。但從原始碼中的ch型別看,應該是支援泛型的,具體在用到了可以仔細研究一下。這篇文件中有json解析相關庫的效能比較,rapidjson還是各方面均衡比較突出...

gcc的使用例解

linux系統下的gcc gnu c compiler 是gnu推出的功能強大 效能優越的多平台編譯器,是gnu的代表作品之一。gcc是可以在多種硬體平台上編譯出可執行程式的超級編譯器,其執行效率與一般的編譯器相比平均效率要高20 30 gcc 可同時用來編譯 c 程式和 c 程式。一般來說,c 編...

tcl tk詳解 glob使用例解

新增鏈結描述 名稱glob 返回模式匹配的檔名語法 glob switches?pattern pattern 描述這個命令返回乙個匹配pattern變元的檔案列表,返回的列表並不排序,如果需要排序就需要呼叫lsort命令。如果初始變元使用 開頭,就作為標誌出現,以下所述是目前支援的標誌位 dire...