QT设置QTableWidget左上角文字(CornerButton)

关于这个左上角

在QTableWidget中,左上角有一个可以点击的空白区域,如图:

默认情况下,点击它会全选所有的单元格。

它即不属于列表头,也不属于行表头,它的名称叫Corner Button

在QTableWidget中,有几个操作Corner Button的方法:

setCornerButtonEnabled();  //设置是否启用这个按钮,如果值为false则不能被点击

setCornerWidget();  //给这个按钮设置其它QWidget类型的对象

cornerWidget();  //获取这个按钮所包含的QWidget对象

原本以为通过setCornerWidget()方法就可以设置它的文本等,不过很遗憾,设置之后发现左上角并没有变化! 在启用横向和纵向滚动条后:

QTableWidget *tab = ui->tableWidget;
tab->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);  //始终启用横向滚动条
tab->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);    //始终启用纵向滚动条

发现设置的QWidget对象出现在右下角的这个位置:

设置的竟然是右下角,尴尬~~

设置方法

查了不少资料,QTableWidget中似乎并没有提供直接修改左上角按钮的方法!

网上有大佬提供了一段代码,通过事件过滤器捕捉Paint(绘制)事件,然后重绘按钮。。

测试可行,但我总觉得过于复杂了~~

另类的方法

一番研究后,还是让我找到了一个简单的方法!

首先,查看一下QTableWidget的子对象信息:

QTableWidget *tab = ui->tableWidget;
qDebug() << tab->children();

如图:

我判断图中选中的部分就是左上角的按钮对象!但是QTableCornerButton是QTableWidget的内部对象,QT没有直接引用和创建的方法。不管,先测试一下能不能操作它!

.h头文件中加入:

#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QHBoxLayout>

.cpp文件:

QTableWidget *tab = ui->tableWidget;
QWidget *ww = (QWidget*) tab->children().at(5);  //使用一个QWidget对象来承载QTableCornerButton对象
QHBoxLayout *hbox = new QHBoxLayout(ww); //创建一个水平布局器,并绑定到ww
hbox->setMargin(0); //设置布局器边界为0,否则会影响后面组件的显示
QLabel *lab = new QLabel("sky");  //创建一个文本标签,打上想要显示的文本
lab->setAlignment(Qt::AlignCenter);  //设置文本为居中显示
hbox->addWidget(lab); //把文本标签添加到布局器

设置后,效果如图:

搞定收工~~

一些注意事项

1、QTableCornerButton这个对象,在不同参数的QTableWidget对象中位置可能不一样,QTableWidget的参数设置好后,请先查看其子对象:qDebug() << tab->children(); 以确定位置。

2、默认情况下QTableWidget 表格需要有行和列,左上角才会显示。如果没有行和列想显示它,可以通过ww->setFixedSize(50,30);来强制显示,但不推荐这种方式,会影响到表格显示

3、QTableCornerButton对象不能使用QPushButton类型来承载,虽然操作不会报错,但是文本不会显示!

4、此方法完全原创,转载请注明~

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyyx2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值