QListView實現列表顯示,自定義model

2021-10-10 21:30:00 字數 2382 閱讀 8837

執行效果如圖:

**如下:

#include #include struct studioinfo

};class cstudiolistmodel :public qabstractlistmodel

;cstudiolistmodel::cstudiolistmodel(qobject *parent /*= 0*/) :qabstractlistmodel(parent)

cstudiolistmodel::~cstudiolistmodel()

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

qvariant cstudiolistmodel::data(const qmodelindex & index, int role) const

int nrow = index.row();

if (nrow>= rowcount() || nrow<0)

switch (role)

return qvariant();

}bool cstudiolistmodel::setdata(const qmodelindex &index, const qvariant &value, int role /* = qt::editrole */)

int nrow = index.row();

if (nrow>= rowcount() || nrow<0)

switch (role)

emit datachanged(index, index);

return true;

}void cstudiolistmodel::insertitems(const qlist& lstdatas)

}void cstudiolistmodel::insertitem(const studioinfo& dat)

void cstudiolistmodel::delitems()

}void cstudiolistmodel::delitem(const qstring& szstudioid)}}

}

qlistview是乙個n行多列的控制項,qabstractlistmodel模型已經實現了columncount,返回的是1。上述**包括了修改某行的學生名字,增加一行/多行學生資訊,刪除一行/多行學生資訊。需要注意的是增加要在begininsertrows和endinsertrows之間做,而刪除則是 beginremoverows()和endremoverows()之間。

rowcount用來通知model有多少行資料,data用來返回view所需要的的資料,qt::displayrole是model用來儲存展現給使用者的資料的,相當於陣列,還有其他角色,讀者可自行檢視幫助文件。setdata則是用來設定資料的,資料修改後要emit訊號datachanged,這樣view才會及時更新資料;

model的使用:

qlistlstdata;

studioinfo info;

info.szstudioid = "1001";

info.szstudioname = "zhangsan";

info.szaddress = "wuhan";

info.nage = 20;

info.bman = true;

lstdata.push_back(info);

info.szstudioid = "1002";

info.szstudioname = "lili";

info.szaddress = "beijing";

info.nage = 22;

info.bman = false;

lstdata.push_back(info);

info.szstudioid = "1003";

info.szstudioname = "wangwu";

info.szaddress = "tianjin";

info.nage = 19;

info.bman = true;

lstdata.push_back(info);

qlistview* plistview = new qlistview(this);

cstudiolistmodel* plistmodel = new cstudiolistmodel(this);

plistview->setmodel(plistmodel);

plistmodel->insertitems(lstdata);

列表顯示格式

list2 1,2,3,4,5,6,7,8,9 range start,end,step list2 start,end,step print list2 1 2 1 print list2 1 print list2 2 2 import random 取乙個60 100的隨機整數 print r...

Nginx目錄檔案列表顯示

專案中使用了tomcat,nginx,測試階段,生產階段經常會有些bug需要調查。需要有些日誌管理工具,在沒有elk的情況下,可以通過配置nginx來實現基本的日常檢視。不需要登入到linux伺服器上,通過瀏覽器即可快速獲得日誌檔案。1.準備通過web查詢的nginx日誌 var log nginx...

Nginx目錄檔案列表顯示

專案中使用了tomcat,nginx,測試階段,生產階段經常會有些bug需要調查。需要有些日誌管理工具,在沒有elk的情況下,可以通過配置nginx來實現基本的日常檢視。不需要登入到linux伺服器上,通過瀏覽器即可快速獲得日誌檔案。1.準備通過web查詢的nginx日誌 var log nginx...