一,前言
之前15. QT自定義ItemModel的方法--Apple的學(xué)習(xí)筆記已經(jīng)學(xué)習(xí)過(guò)自定義模型,只是自己沒(méi)實(shí)踐過(guò)。有點(diǎn)云里霧里的。
二,需求
實(shí)踐從數(shù)據(jù)庫(kù)獲取到數(shù)據(jù),建立自定義itemModel,并且綁定到treeview上顯示。
三,遇到的問(wèn)題
- 如何添加一個(gè)主節(jié)點(diǎn)的第一層級(jí)內(nèi)容?
// 主節(jié)點(diǎn)最后一行加入一個(gè)item項(xiàng)
QModelIndex insertIndex;
insertIndex = model->index(model->rowCount(),0);
// 插入一個(gè)容器位置
model->insertRow(model->rowCount(),insertIndex);
// 為此位置設(shè)置值,注意 此處model數(shù)量已經(jīng)加1,所以要減去1
model->setData(model->index(model->rowCount()-1, 0), QVariant("數(shù)據(jù)類(lèi)型"), Qt::EditRole);
- 如何以第一層級(jí)為node繼續(xù)添加第二層級(jí)?
答:右鍵添加接口點(diǎn)擊ok后,就發(fā)送信號(hào),執(zhí)行如下。
void MainWindow::insertval(QString val)
{
QModelIndex insertIndex1;
insertIndex1 = model->index(2,0);//接口節(jié)點(diǎn)抬頭
// 在接口抬頭節(jié)點(diǎn)最前端添加新接口
model->insertRow(0,insertIndex1);
model->setData(insertIndex1.child(0,0),QVariant(val), Qt::EditRole);
model->setData(insertIndex1.child(0,1),QVariant("name of interface"), Qt::EditRole);
}
四,效果
我是基于editabletreemodel的QT example code修改的底層。它從txt建立數(shù)據(jù),我從sql建立數(shù)據(jù)。sqlite的數(shù)據(jù)庫(kù)參考24. QTableview界面設(shè)置--Apple的學(xué)習(xí)筆記
本次主要練習(xí)的是sql數(shù)據(jù)綁定到自定義模型后,能顯示到treeview,并且右鍵可以添加新接口。

image.png
五,小結(jié)
我直接寫(xiě)model還是有問(wèn)題,它連標(biāo)題欄都沒(méi)顯示出來(lái)。最后是基于QT案例修改的,所以我之后還要再研究下,主要是調(diào)用關(guān)系不清楚,應(yīng)該看下QT幫助及QT源碼,去了解各類(lèi)調(diào)用關(guān)系。