QTableWidget QTableWidgetItem的介绍

最近在制作一个表格时,要求,当Item里没内容时,item不可选中,也就是只有item里有内容时,才可以选中。

网上查了设置方法,确实查到了。在QTableWidgetItem设置为不可选中、不可编辑等状态_AlexZhaosg的博客-CSDN博客_qtablewidget不可选中文章里,了解到可以通过setFocus()的办法实现。

程序逻辑是:有内容时,把item设置为可选中,无内容时把item设置为不可选中

this->item(i, j)->setFlags(this->item(i, j)->flags() & Qt::ItemIsEnabled & Qt::ItemIsSelectable);

this->item(i, j)->setFlags(this->item(i, j)->flags() & ~Qt::ItemIsEnabled & ~Qt::ItemIsSelectable);

但是结果,没到达到我的预期,这让我一度认为这个方法不靠谱,然而在偶然的测试中,发现竟然在一瞬间,软件运行在某个时期,满足我的预期。

经过测试与探究,终于发现问题所在!因为我设置item这个操作(上面的代码)是在内容添加后才调用的。而不是一开始就调用的,因为我本想,程序在初始化时,我并没有对表格里的item进行初始化,即setItem(i,j new QTableWidgetItem),所以我想,此时item应该不存在,所以即时我没设置item它应该也不能被选中。然后我错了,item在QTableWidget初始化时,就存在,只是里面没有QTableWidgetItem而已,而this->item(i, j)->setFlags(this->item(i, j)->flags() & Qt::ItemIsEnabled & Qt::ItemIsSelectable);设置的是item,不是QTableWidgetItem。也就是说item!=QTableWidgetItem。可以这么理解,item是个坑,而QTableWidgetItem是坑里的东西。我们平时操作item的是这个坑对象,而不是QTableWidgetItem。

因此,为了避免QTableWidget在初始化后,空的item初始可选状态,就应该,在初始化时,就对item进行不可选中的初始化设置。

PS,另外:QTableWidget::setFocusPolicy(Qt::Nofocus);可以去掉item的虚线框;

设置QTableWidget::setStyleSheet("QTableWidget::item:selected{background:lightblue;}")能让明显地看到item选中与不被选中的效果,验证设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值