21#include <QContextMenuEvent>
24 : QHeaderView(Qt::Horizontal, parent)
26 , m_resizeOnShow(false)
28 setSectionsMovable(
true);
29 setStretchLastSection(
true);
30 setDefaultAlignment(Qt::AlignLeft);
31 setMinimumSectionSize(60);
36 m_sectionSizes = sizes;
41 return m_sectionSizes;
46 m_resizeOnShow = !QHeaderView::restoreState(
state);
48 return !m_resizeOnShow;
51void HeaderView::showEvent(QShowEvent* event)
54 for (
int i = 0;
i < m_sectionSizes.count(); ++
i) {
55 int size = m_parent->width() * m_sectionSizes.at(
i);
56 resizeSection(
i, size);
60 QHeaderView::showEvent(event);
63void HeaderView::contextMenuEvent(QContextMenuEvent* event)
66 m_menu =
new QMenu(
this);
68 for (
int i = 0;
i < count(); ++
i) {
69 auto* act =
new QAction(model()->headerData(
i, Qt::Horizontal).toString(), m_menu);
70 act->setCheckable(
true);
73 connect(act, &QAction::triggered,
this, &HeaderView::toggleSectionVisibility);
74 m_menu->addAction(act);
78 for (
int i = 0;
i < m_menu->actions().count(); ++
i) {
79 QAction* act = m_menu->actions().at(
i);
80 act->setEnabled(
i > 0);
81 act->setChecked(!isSectionHidden(
i));
84 m_menu->popup(event->globalPos());
87void HeaderView::toggleSectionVisibility()
89 if (
auto* act = qobject_cast<QAction*>(sender())) {
90 int index = act->data().toInt();
92 setSectionHidden(index, !isSectionHidden(index));