前面分享了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的水平標題欄,實現了過濾 ...