在我的QListWidget子类中,当我使用setSelectionModel替换其QItemSelectionModel时,列表小部件停止发出其itemSelectionChanged信号。在实际代码中,我这样做是为了安装QItemSelectionModel的子类,但即使我只使用新的QItemSelectionModel,问题也会出现。
$(self.el).html(self.template({card: item}));
在调试器中,我可以看到QItemSelectionModel发出其selectionChanged信号,但QListWidget从不发出相应的itemSelectionChanged信号。
如果我注释掉这个构造函数的主体,那么一切正常。和以前一样,我可以看到QItemSelectionModel发出其selectionChanged信号,但现在触发QListWidget发出itemSelectionChanged。
看起来我对setSelectionModel的调用导致QItemSelectionModel :: selectionChanged和QListWidget :: itemSelectionChanged之间的连接中断。
顺便说一下,我查看是否将错误的参数传递给我的新QItemSelectionModel。创建它之后,newSelectionModel的model()和parent()与oldSelectionModel的相同。我也试着评论对deleteLater的调用,但这没有帮助。
任何帮助都非常感激。
答案 0 :(得分:0)
根据Qt
的{{1}}文档,QAbstractItemView
会替换当前的选择模型,如果在此之后调用setSelectionModel
,它将无法工作。
注意,如果在此函数之后调用setModel(),则给定 selectionModel将被视图创建的替换。
另外,来自setModel()
文档,
QListWidget是一个便利类,提供类似的列表视图 到QListView提供的那个,但有一个经典的基于项目 用于添加和删除项目的界面。 QListWidget使用内部 用于管理列表中每个QListWidgetItem的模型。
看起来每当您添加项目时,模型都会更新/刷新,从而使您的自定义选择模型失效(仅限我的想法)。
此外,您不需要按照QListWidget
文档删除旧的选择模型
注意:应用程序可以删除旧的选择模型 它不再需要;即,如果其他观点没有使用它。 这将在删除其父对象时自动发生。 但是,如果它没有父级,或者父级是a 长寿命对象,最好调用它的deleteLater() 函数明确删除它。
如果您想要这种级别的自定义,Qt
可能是更好的选择。
只是想知道,在将所有项目添加到列表小部件后,您是否尝试过设置自定义选择模型?
答案 1 :(得分:0)