QTableView表头添加CheckBox

通过重写QHeaderVIew类,实现表头添加复选框;代码如下

class HeaderView : public QHeaderView
{
    Q_OBJECT

public:
    explicit HeaderView(Qt::Orientation orientation, QWidget* parent = 0)
        : QHeaderView(orientation, parent) 
    {
        cbx_header= new QCheckBox(this);
        cbx_header->setVisible(true);
    }

protected:
    void updateGeometries() 
    {
        cbx_header->move(sectionPosition(0) + 3, 6);
    }

private:
    QCheckBox *cbx_header;    
};

重写QHeaderView之后,使用重写的类,设置tableview即可,代码如下

QTableView *tmp_tableview;
tmp_tableview = new QTableView();
tmp_tableview->setRowCount(3);
tmp_tableview->setColumnCount(4);

HeaderView* header = new HeaderView(Qt::Horizontal, tmp_tableview);
tmp_tableview->setHorizontalHeader(header);
tmp_tableview->show();

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在QTableView表头添加CheckBox,需要实现自定义QHeaderView并重写其paintSection()和mousePressEvent()方法。 首先,在自定义的QHeaderView的构造函数中设置其为可以接收鼠标事件: ```python class CheckBoxHeader(QtWidgets.QHeaderView): def __init__(self, parent): super().__init__(QtCore.Qt.Horizontal, parent) self.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) self.setClickable(True) self.setSortIndicatorShown(False) ``` 然后,重写paintSection()方法,在其中绘制CheckBox: ```python class CheckBoxHeader(QtWidgets.QHeaderView): def paintSection(self, painter, rect, logicalIndex): painter.save() super().paintSection(painter, rect, logicalIndex) if logicalIndex == 0: option = QtWidgets.QStyleOptionButton() option.rect = QtCore.QRect(10, 5, 20, 20) option.state = QtWidgets.QStyle.State_Enabled | QtWidgets.QStyle.State_Active if self.isChecked: option.state |= QtWidgets.QStyle.State_On else: option.state |= QtWidgets.QStyle.State_Off self.style().drawControl(QtWidgets.QStyle.CE_CheckBox, option, painter) painter.restore() ``` 最后,重写mousePressEvent()方法,在其中判断是否点击了CheckBox,并根据需要切换其状态: ```python class CheckBoxHeader(QtWidgets.QHeaderView): def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: if self.logicalIndexAt(event.pos()) == 0: self.isChecked = not self.isChecked self.sectionClicked.emit(0) self.viewport().update() else: super().mousePressEvent(event) ``` 在使用QTableView时,将其表头设置为自定义的CheckBoxHeader即可: ```python tableView = QtWidgets.QTableView() header = CheckBoxHeader(tableView) tableView.setHorizontalHeader(header) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值