Qt之QHeaderView新增核取方塊

2021-09-23 14:36:05 字數 2859 閱讀 7615

前面分享了qtableview中如何新增核取方塊。本節主要介紹qtableview中的表頭-qheaderview新增核取方塊的功能,下面以水平表頭為例,垂直表頭類似!

qabstracttablemodel使用

// 槽函式,用於更新核取方塊狀態

void tableheaderview::onstatechanged(int state)

else

m_bchecked = (state != qt::unchecked);

update();

}// 繪製核取方塊

void tableheaderview::paintsection(qpainter *painter, const qrect &rect, int logicalindex) const

qcheckbox checkbox;

option.iconsize = qsize(20, 20);

option.rect = rect;

style()->drawprimitive(qstyle::pe_indicatorcheckbox, &option, painter, &checkbox);

//style()->drawitempixmap(painter, rect, qt::aligncenter, qpixmap(":/images/checkboxchecked"));

//style()->drawcontrol(qstyle::ce_checkbox, &option, painter, this);

}}// 滑鼠按下表頭

void tableheaderview::mousepressevent(qmouseevent *event)

else

}// 滑鼠從表頭釋放,傳送訊號,更新model資料

void tableheaderview::mousereleaseevent(qmouseevent *event)

else

update();

qt::checkstate state = m_bchecked ? qt::checked : qt::unchecked;

emit statechanged(state);

}else

m_bpressed =

false;

}// 滑鼠滑過、離開,更新核取方塊狀態

bool tableheaderview::event(qevent *event)

}return qheaderview::event(event);

}原始碼過多,這裡只貼更改部分及新增部分,其它部分請參考:qt之qtableview新增核取方塊(qabstractitemdelegate)

// 設定**項資料

bool tablemodel::setdata(const qmodelindex &index, const qvariant &value, int role)

}case qt::checkstaterole:

case qt::userrole:

}default:

return

false;

}return

false;

}// 複選狀態改變,通知表頭更新複選狀態

void tablemodel::onstatechanged()

if (nselectedcount >= ncount)

else

if (nselectedcount > 0)

emit statechanged(state);

}// 接收表頭複選狀態更新變化,修改**複選狀態

void tablemodel::onstatechanged(int state)

}

這時,就需要將header與model的訊號與槽關聯起來,更新核取方塊狀態了!

qtableview *ptableview = new qtableview(this);

tablemodel *pmodel = new tablemodel(this);

tableheaderview *pheader = new tableheaderview(qt::horizontal, this);

checkboxdelegate *pdelegate = new checkboxdelegate(this);

ptableview->sethorizontalheader(pheader);

ptableview->setmodel(pmodel);

ptableview->setitemdelegate(pdelegate);

connect(pmodel, signal(statechanged(int)), pheader, slot(onstatechanged(int)));

connect(pheader, signal(statechanged(int)), pmodel, slot(onstatechanged(int)));

Qt之QHeaderView加入核取方塊

前面分享了qtableview中怎樣加入核取方塊。本節主要介紹qtableview中的表頭 qheaderview加入核取方塊的功能,以下以水平表頭為例。垂直表頭相似!qabstracttablemodel使用 槽函式,用於更新核取方塊狀態 void tableheaderview onstatec...

Qt之QHeaderView自定義排序(終極版)

本節主要解決自定義排序衍生的第二個問題 將整形顯示為字串,而排序依然正常。下面我們介紹三種方案 委託繪製 使用者資料 輔助列 很多人也許會有疑慮,平時都用delegate來繪製各種按鈕 圖示 圖形等操作,它還能排序?當然,它本身是不會排序的,但他的高階用法之一就是 輔助排序。使用者資料 輔助列總結 ...

Qt5標題欄自定義QHeaderView自定義

為了能在多個平台上使用自定義標題欄視窗,試了網上好幾個版本,都多少有些問題 最後在github上找到了乙個稍微看的過去的乙個版本,稍加更改後可以在mac os ubuntu,window 上正常使用的版本。整體效果圖 完成了自定義標題視窗後繼續擴充套件了qtableview的水平標題欄,實現了過濾 ...