我试图为我的QTableWidget分配一个选择模型
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)但是这个打印出了错误:
QAbstractItemView::setSelectionModel() failed: Trying to set a selection model, which works on a different model than the view.如能提供任何帮助,将不胜感激。
发布于 2022-07-02 05:33:51
错误消息实际上是明确的:选择模型必须与视图上使用的相同。
这是很明显的:因为选择模型使用视图的模型,所以选择模型必须设置在相同的模型上。在视图上设置模型是而不是,这也是因为,正如setModel()的文档所解释的:
这个函数将创建和设置一个新的选择模型,替换以前用setSelectionModel()设置的任何模型。
最重要的是,选择模型可以在多个项视图之间共享,因此它不能(也不应该)“自动继承”视图的源模型:必须显式地设置源模型;因此,仅创建一个QItemSelectionModel是不够的:它没有引用视图的模型。
由于您可能使用的是子类,所以解决方案是使用模型作为其第一个参数调用基本实现,或者显式调用setModel()
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)在这两种情况下,必须设置视图的模型。
https://stackoverflow.com/questions/72768593
复制相似问题