Qt QTableWidget 表头 添加自定义 QHeaderView QCheckBox QCombox 并实现表头控制列
实现效果如下
QTableWidget的表头不能直接添加QWidget,如果需要在表头添加自定义控件,需要继承重写QHeaderView,即可实现上图的功能
头文件
class HeaderView4CheckBox: public QHeaderView
{
Q_OBJECT
public:
HeaderView4CheckBox(int checkColumnIndex,
Qt::Orientation orientation,
QWidget * parent = 0);
virtual~ HeaderView4CheckBox();
void UpdateHeaderCheckState(QButtonGroup* pCheckBoxGroup);
private:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override;
//void mousePressEvent(QMouseEvent *event) override;
private:
int m_checkboxColumnIndex = -1;
QCheckBox* m_pCheckBox;
};
构造函数: 参数Qt::Orientation分为横向和纵向,由于其他列表头均为用QTableWidgetItem设置,此处还传入需要设置QCheckBox的列
UpdateHeaderCheckState(QButtonGroup* pCheckBoxGroup); pCheckBoxGroup是这个表头下所有QCheckBox的Group,所以该函数为其中任意一个发生变化,通知更新表头checkBox状态
void paintSection