在Qt中找不到QListview的SelectionChanged事件?

8

在Qt中,Qlistview没有提供Selectionchanged事件。相应的等价事件是itemSelectionChanged()。

2个回答

17

selectionChanged 信号是由附加到视图的 QItemSelectionModel 生成的,而不是视图小部件本身。

您可以通过在视图对象上调用 selectionModel() 或使用 setSelectionModel() 添加自己的模型来获取该模型。

这适用于 QListViewQListWidget,因为此行为由两者都继承的 QAbstractItemView 处理。

(类层次结构为 QAbstractItemView < QListView < QListWidget。)

有关更多信息,请参见 Handling selections in item view


1
抱歉,我指的是列表小部件而不是列表视图。 - Bokambo
1
这将是一个重复的东西,伙计。请在这里给出你的答案。谢谢。 - Bokambo
@user662285 我真希望你在事后不要编辑你的问题,你应该为QListWidget发布一个不同的问题,因为它们是完全不同的小部件。 - jrh

3

这只是关于选择,那么重点是什么?

使用 QListView 时:

QAbstractItemView::currentChanged ( const QModelIndex & current, const QModelIndex & previous )

当使用QListWidget时,您还可以使用:

QListWidget::currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )

文档:


3
不确定以前是否有效,但似乎在 qt 4.8 中不起作用,因为 QListView 的 currentChanged 函数因某种原因被保护了。 - Stefan Fabian
1
我可以确认QAbstractItemView::currentChangedQt 5.7中是受保护的,只有在您尝试制作自己的ListView实现时才会有用。 - jrh
你能否将你的回答中的 QListView 部分删除掉?QListWidget 部分是正确的,但 QListView 部分是错误的,Mat 在这方面是正确的。 - jrh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接