You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从QTableWidget中读取内嵌QCheckBox的选中状态

你往单元格里塞的是包裹了QCheckBox的QWidget容器,所以cellWidget()返回的就是你当初塞的这个外层容器,不是直接返回QCheckBox,你需要从这个容器里提取内部的QCheckBox实例即可。

解决方法


方法1:直接从布局提取子控件

你创建容器时是往QHBoxLayout里加的QCheckBox作为第一个控件,直接从布局取即可,代码示例:

# 获取单元格对应的容器控件
cell_widget = self.definedEventsTable.cellWidget(row, select_column)
if cell_widget:
    # 从容器的布局中取出第一个子控件,就是你创建的QCheckBox
    check_box = cell_widget.layout().itemAt(0).widget()
    # 读取选中状态
    is_selected = check_box.isChecked()

方法2:通过objectName定位(更稳妥,不易受布局调整影响)

创建QCheckBox的时候给它设置唯一标识,后续直接查找即可:

  1. 修改创建复选框的代码,增加objectName设置:
    chk_bx = QCheckBox()
    chk_bx.setObjectName("table_cell_checkbox") # 新增这行
    
  2. 读取状态的时候直接查找对应控件:
    cell_widget = self.definedEventsTable.cellWidget(row, select_column)
    if cell_widget:
        check_box = cell_widget.findChild(QCheckBox, "table_cell_checkbox")
        is_selected = check_box.isChecked()
    

之前接口返回None的原因说明


  • item(row, select_column):该接口返回的是单元格对应的QTableWidgetItem实例,你没有手动给该单元格设置过Item,因此返回None
  • itemAt(row, select_column):该接口的入参是像素坐标值,不是行号、列号,传行列号自然返回错误结果
  • 如果之前cellWidget()返回过None,优先排查行号、列号是否从0开始计数,是否超出了表格当前的总行数/总列数范围。

内容的提问来源于stack exchange,提问作者geekygeek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:45:03