QTableWidget表格左上角添加自定义全选功能
Qt没有提供修改左上角自定义全选功能的接口,但是可以通过children()接口查询到cornerWidget,重新添加自定义窗口部件。
直接上代码:
tablewidget = new QTableWidget;
tablewidget->setRowCount(3);
tablewidget->setColumnCount(3);
tablewidget->setHorizontalHeader(m_pHeader);
QObjectList objList = tablewidget->children();
for(QObject* obj : objList)
{
qDebug()<<obj;
}
//左上角全选功能设置
cornerwidget->resize(20,20);
QWidget* corner = (QWidget*)tablewidget->children().at(5);
QHBoxLayout* cornHbox = new QHBoxLayout(corner);
cornHbox->addWidget(cornerwidget);
cornHbox->setMargin(0);
//设置点击左上角,修改所有单元格内容
connect(cornerwidget, &CornerWidget::clicked, [&]{
static bool status = false;
status = !status;
for(int i = 0; i < tablewidget->rowCount(); i++)
{
for(int j = 0; j < tablewidget->columnCount(); j++)
{
QString text = status ? "11" : "";
QTableWidgetItem* item = new QTableWidgetItem(text);
tablewidget->setItem(i, j, item);
}
}
});
//.h
#ifndef CORNERWIDGET_H
#define CORNERWIDGET_H
#include <QWidget>
#include <QMouseEvent>
class CornerWidget : public QWidget
{
Q_OBJECT
public:
explicit CornerWidget(QWidget *parent = nullptr);
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event) override;
};
#endif // CORNERWIDGET_H
//.cpp文件
#include "cornerwidget.h"
CornerWidget::CornerWidget(QWidget *parent) : QWidget(parent)
{
}
void CornerWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
emit clicked();
}
}