Qt之多行表頭控制項

2021-09-02 13:01:12 字數 1834 閱讀 5904

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...