首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QAbstractItemView::setSelectionModel()失败:尝试设置一个与视图不同的选择模型

QAbstractItemView::setSelectionModel()失败:尝试设置一个与视图不同的选择模型
EN

Stack Overflow用户
提问于 2022-06-27 07:46:18
回答 1查看 64关注 0票数 1

我试图为我的QTableWidget分配一个选择模型

代码语言:javascript
复制
    def initPlotTW(self):
        plotTWHeaderLabels = ['Select','Plot name','Marker','Color','Linestyle','Linewidth','Axis']
        plotTW = self.plotTW
        plotTW.setColumnCount(len(plotTWHeaderLabels))
        plotTW.setHorizontalHeaderLabels(plotTWHeaderLabels)
        plotTW.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.setSelectionModel()
        plotTW.itemSelectionChanged.connect(lambda:self.test())
    

    def setSelectionModel(self):
        plotTWModel = QtCore.QItemSelectionModel()
        self.plotTW.setSelectionModel(plotTWModel)

但是这个打印出了错误:

代码语言:javascript
复制
QAbstractItemView::setSelectionModel() failed: Trying to set a selection model, which works on a different model than the view.

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-07-02 05:33:51

错误消息实际上是明确的:选择模型必须与视图上使用的相同。

这是很明显的:因为选择模型使用视图的模型,所以选择模型必须设置在相同的模型上。在视图上设置模型是而不是,这也是因为,正如setModel()的文档所解释的:

这个函数将创建和设置一个新的选择模型,替换以前用setSelectionModel()设置的任何模型。

最重要的是,选择模型可以在多个项视图之间共享,因此它不能(也不应该)“自动继承”视图的源模型:必须显式地设置源模型;因此,仅创建一个QItemSelectionModel是不够的:它没有引用视图的模型。

由于您可能使用的是子类,所以解决方案是使用模型作为其第一个参数调用基本实现,或者显式调用setModel()

代码语言:javascript
复制
class MyCustomSelectionModel(QItemSelectionModel):
    def __init__(self, model=None, parent=None):
        super().__init__(model, parent)

# and, then:

    plotTWModel = MyCustomSelectionModel(self.plotTW.model())

# or, alternatively:

    plotTWModel = MyCustomSelectionModel()
    # ...
    plotTWModel.setModel(self.plotTW.model())

# finally:

    self.plotTW.setSelectionModel(plotTWModel)

在这两种情况下,必须设置视图模型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72768593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档