QTableView Optimization ⑶

img

书接上文,我们继续来聊聊 QTableView 上可以自定义的新功能

Hover Row

img

QTableView 可以通过 style sheet 来配置 hover 和 selected 的颜色

setSelectionBehavior``(``SelectItems``); 时,即只 hover 单个单元格时是有效的

setSelectionBehavior(SelectRows);setSelectionBehavior(SelectColumns); 时,

styleSheet 中 hover 不生效,即鼠标移动时,不能做到整行或整列的高亮

要解决这个 bug,我们可以通过自定义 QStyledItemDelegate 实现

主要是通过修改 QStyle::State_MouseOver 实现

测试代码1

Checkable

表格复选框,包括行选择,列选择,单元格选择,全选

img

QHeaderView 没有提供复选框的功能,我们可以通过自定义 QHeaderView 类,实现它的 paintSection 函数,也可以通过 Qt::DecorationRole 来模拟表头的复选框功能

这里采用了后者,代码量很少,只要修改 model 的 headerData 及 setHeaderData 函数就行了

单元格选择可以通过修改 model 的 flags、data、setData 函数实现

全选按钮是通过 findChild 查找到对应的 button,然后在里面 layout 一个 QCheckbox 实现的