【发布时间】:2019-03-08 06:40:03
【问题描述】:
我有一个自定义的QTableView 模型和一个自定义的QHeaderView,以便呈现一个用于对表格内容执行“全选”功能的复选框。
在我的标头重载的paintSection() 函数中,我成功渲染了用于全选的复选框:
QStyleOptionButton option;
option.rect = QRect(3,10,16,16);
option.state = QStyle::State_Enabled | QStyle::State_Active;
if (isChecked_)
option.state |= QStyle::State_On;
else
option.state |= QStyle::State_Off;
style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter);
不幸的是,复选框没有居中呈现,而是左对齐。这与每个表条目的列中正确居中的QStyledItemDelegate 复选框完全冲突。
我知道我可以更改QRect 的前两个参数来更改绘制图元的原点,但这不会响应列宽的变化。虽然,固定列宽并不是最糟糕的解决方案。
如何在列标题中正确居中复选框?
辅助问题:可以通过单击单元格中的 anywhere 来切换标题中的复选框,而不仅仅是在框本身上(与通过代表在表格中呈现的那些不同)。有没有办法解决这个问题?
【问题讨论】:
-
你的第二个问题我也有解决办法,但是按照一帖一问的规定,建议你分开问。您可以发布指向此问题的链接以涵盖常见细节。重要的是解释你如何设置/重置
isChecked_。 -
@Answoquest 我的解决方案对你有用吗?
-
@Answoquest 好的,但请始终记住提供反馈,以便您解决任何问题。 :-)
-
@Answoquest,我认为是时候接受eyllanesc的回答了。您不妨考虑投票。
标签: c++ qt qt5 qheaderview