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

QTableWidget setSelectionModel报错:选择模型与视图模型不匹配如何解决

问题原因

Qt所有基于QAbstractItemView的视图类(包括QTableWidget)有明确校验规则:调用setSelectionModel()传入的选择模型,必须和视图当前绑定的数据模型为同一个实例,否则就会抛出你看到的报错。
你的代码里创建QItemSelectionModel时用了无参构造,这个新生成的选择模型没有关联任何数据模型;而QTableWidget初始化时会自动创建一个内置的私有数据模型供自身存储表格数据,你传入的空构造选择模型和视图持有的数据模型完全不匹配,自然会触发设置失败的提示。
补充说明:QTableWidget初始化时会自动生成适配自身内置模型的默认选择模型,绝大多数业务场景下不需要手动新建选择模型,直接调用self.plotTW.selectionModel()就能拿到可用的实例,完全能满足行选、列选、选中状态监听等常规需求。

修复方法

如果确实因为自定义选择逻辑需要手动替换选择模型,创建QItemSelectionModel实例时必须传入两个参数:

  • 视图当前绑定的数据模型,通过视图的model()方法直接获取即可
  • 父对象指针,一般直接传入对应的QTableWidget实例,避免Qt对象内存泄漏

修正后的setSelectionModel方法实现如下:

def setSelectionModel(self):
    # 构造选择模型时绑定视图的当前模型,同时指定父对象
    custom_selection_model = QtCore.QItemSelectionModel(self.plotTW.model(), self.plotTW)
    self.plotTW.setSelectionModel(custom_selection_model)

如果没有特殊的自定义选择需求,直接删掉手动创建选择模型的代码即可,默认生成的选择模型完全能支撑你代码里的行选设置、选中信号监听逻辑,不会出现任何兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:15:46