qt不提供預設的多行表頭控制項, 網上大多也是用2個qtablewidget組合來實現,最近在網上看到乙份資源。他的思路是使用model/view,通過使用過載來實現,我覺得很有學習借鑑的價值。所以在這分享。
由於**過多,在這裡就不詳細展示了。只貼出使用方法。 有能力的同學也可以在封裝成tablewidget
rbtableheaderview* hhead = new rbtableheaderview(qt::horizontal, 2, 3);
rbtableheaderview* vhead = new rbtableheaderview(qt::vertical, 3, 2);
qabstractitemmodel* hmodel = hhead->model();
qabstractitemmodel* vmodel = vhead->model();
qstandarditemmodel* datamodel = new qstandarditemmodel;
hhead->setspan(0, 0, 2, 1);
hhead->setspan(0, 1, 1, 2);
hhead->setspan(1, 1, 1, 1);
hhead->setspan(1, 2, 1, 1);
hmodel->setdata(hmodel->index(0, 0), qstring("cell1"), qt::displayrole);
hmodel->setdata(hmodel->index(0, 1), qstring("cell2"), qt::displayrole);
hmodel->setdata(hmodel->index(1, 1), qstring("cell3"), qt::displayrole);
hmodel->setdata(hmodel->index(1, 2), qstring("cell4"), qt::displayrole);
vhead->setspan(0, 0, 1, 2);
vhead->setspan(1, 0, 2, 1);
vhead->setspan(1, 1, 1, 1);
vhead->setspan(2, 1, 1, 1);
vmodel->setdata(vmodel->index(0, 0), qstring("cell1"), qt::displayrole);
vmodel->setdata(vmodel->index(1, 0), qstring("cell2"), qt::displayrole);
vmodel->setdata(vmodel->index(1, 1), qstring("cell3"), qt::displayrole);
vmodel->setdata(vmodel->index(2, 1), qstring("cell4"), qt::displayrole);
hhead->setsectionsclickable(true);
vhead->setsectionsclickable(true);
for (int i = 0; i < 3; i++)
}view = new qtableview();
view->resize(800, 600);
view->setmodel(datamodel);
view->sethorizontalheader(hhead);
view->setverticalheader(vhead);
view->show();
為Gridview控制項新增多行表頭(之一)
在實際工作中,經常看到電子版或者紙質版的 這些 通常都不是一行表頭,需要2行或者3行,只有這樣的表頭,才能明確表示表中資料的具體涵義。並且多行表頭中,將資料相同的單元格進行合併,包括橫向合併 縱向合併。那麼,我們在使用gridview時,如何才能實現多行表頭呢?主要有三種方法,是利用gridviwr...
GridView多行表頭合併
多行表頭合併,網上很多例項,這裡寫的很詳細,力求讓每個人都能看懂.實現原理 gridview在asp.net中最終轉為hmtl的 顯示表頭。在gridview建立行表頭行時 e.row.rowtype datacontrolrowtype.header 清除掉舊的表頭,再重新拼接新的表頭.table...
GridView多行表頭合併
多行表頭合併,網上很多例項,這裡寫的很詳細,力求讓每個人都能看懂.實現原理 gridview在asp.net中最終轉為hmtl的 顯示表頭。在gridview建立行表頭行時 e.row.rowtype datacontrolrowtype.header 清除掉舊的表頭,再重新拼接新的表頭.table...