当前位置: 首页 > article >正文

Qt Qtablewidget 标题 QHeaderView 增加可选框 QcheckBox

创建自定义QHeaderView

#pragma once

#include <QObject>
#include <QHeaderView>
#include <QPainter>
#include <QMouseEvent>

class SSHeaderView  : public QHeaderView
{
	Q_OBJECT

private:
	bool isChecked;
	int m_checkColIdx;
public:
	SSHeaderView(int checkColumnIndex, Qt::Orientation orientation, QWidget * parent = 0) :
		QHeaderView(orientation, parent) {
		m_checkColIdx = checkColumnIndex;
		isChecked = false;
	}
signals:
	void checkStausChange(bool);
protected:
	void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const {
		painter->save();
		QHeaderView::paintSection(painter, rect, logicalIndex);
		painter->restore();
		if (logicalIndex == m_checkColIdx) {
			QStyleOptionButton option;
			int width = 10;
			for (int i = 0; i < logicalIndex; ++i)
				width += sectionSize(i);
			option.rect = QRect(3, 3, 21, 21);
			if (isChecked)
				option.state = QStyle::State_On;
			else
				option.state = QStyle::State_Off;
			this->style()->drawControl(QStyle::CE_CheckBox, &option, painter);
		}
	}
	void mousePressEvent(QMouseEvent *event) {
		if (visualIndexAt(event->pos().x()) == m_checkColIdx) {
			isChecked = !isChecked;
			this->updateSection(m_checkColIdx);
			emit checkStausChange(isChecked);
		}
		QHeaderView::mousePressEvent(event);
	}

};

使用:

SSHeaderView *m_checkHeader = new SSHeaderView(0, Qt::Horizontal, qtableWidget);
qtableWidget->setHorizontalHeader(m_checkHeader);   
connect(m_checkHeader, &SSHeaderView::checkStausChange, [=](bool check) {
		qDebug() << "is:" << check;
	});

最终效果:


http://www.kler.cn/a/422089.html

相关文章:

  • AWS Kinesis Firehose 权限配置完全指南
  • Linux 网卡收包流程如下
  • 1、C++ 介绍
  • 家政小程序开发,打造便捷家政生活小程序
  • 乐橙云小程序插件接入HbuilderX
  • Git中HEAD、工作树和索引的区别
  • 【Vue3】【Naive UI】<NAutoComplete>标签
  • 【Flink】Flink Checkpoint 流程解析
  • Vue 入门级教程四:深入 Vue 组件与路由
  • 【pytorch】pytorch的缓存策略——计算机分层理论的另一大例证
  • 实数与复数频谱掩蔽在音频分离中的应用
  • WPF_1
  • Scala身份证号if else if else查询省份
  • 每日一题:golang并发 mutex、context
  • 【论文阅读】Adversarial gradient-based meta learning with metric-based test
  • 什么是 Socket?
  • 005 MATLAB符号微积分
  • 数仓项目常见问题解答
  • Narya.ai正在寻找iOS工程师!#Mixlab内推
  • linux下环境变量的使用
  • 基于Java Springboot时间管理微信小程序
  • NLP 相关知识的构成
  • MR30分布式 IO 模块助力印刷设备,开启收益新篇
  • python脚本:Word文档批量转PDF格式
  • el-input输入校验,只允许输入数字或者带一个小数点的数字。
  • Linux环境部署RocketMQ单节点以及双主双从集群环境