Qt/C++:检查 QListWidgetItem 时的信号?

Posted

技术标签:

【中文标题】Qt/C++:检查 QListWidgetItem 时的信号?【英文标题】:Qt/C++: Signal for when a QListWidgetItem is checked? 【发布时间】:2010-11-23 05:02:18 【问题描述】:

在我的表单中,我有一个 QListWidget,其中包含可检查的 QListWidgetItems。我正在寻找一种方法来捕获QListWidgetItem 被选中/取消选中的事件。我没有看到任何这样的信号存在,但也许我错了。我目前正在做的是使用QListWidget::itemClicked() 信号并检查QListWidgetItemcheckState,但这不是我想要的,因为只要单击该项目,就会发生此事件,而不仅仅是选中标记切换。任何人都可以提供一些帮助吗?谢谢!

【问题讨论】:

我想我可以使用 QListWidget::itemChanged() 信号来解决这个问题,当我选中/取消选中一个项目时会触发它,但如果我编辑项目的值也会触发它虽然我现在没有这样做,但仍然是一个不完美的解决方案。 QListWidget::itemClicked() 的另一个问题是当您使用键盘时它不会触发,例如使用空格键更改选中状态。 【参考方案1】:

显然没有提供这样的信号,你最好的办法是使用QListWidget::itemChanged(QListWidgetItem* item),然后扫描得到的item->checkState()。这应该比使用 itemClicked 略有改进

【讨论】:

这是一个受保护的信号。当我按照here 的解释使用此错误时,我将面临一个错误。 itemChanged 并不总是触发;例如如果您突出显示该项目,然后反复按空格键。 @CodeLurker:这听起来像是一个错误。 我错了。 itemChanged() 确实是拦截的正确信号。它确实在检查状态更改时触发。确保不要将它与 currentItemChanged() 混淆,后者不会。【参考方案2】:

另一个选项是使用您自己的QAbstractListModelQListView。起初,这确实会添加一些额外的代码,因为您需要添加自己的管理代码。但是您确实获得了较低级别的访问权限。基本上是因为QListView 会询问您的模型该做什么。它还会将输入转发回您的列表模型,您可以在其中连接到它。

或者,您可以将QStandardItemModel 子类化并捕获与更改复选框相关的某些编辑。

【讨论】:

以上是关于Qt/C++:检查 QListWidgetItem 时的信号?的主要内容,如果未能解决你的问题,请参考以下文章

QListWidgetItem 中不可见的图标

在 setupUI 中连接 QListWidgetItem [重复]

使用 qtbot.mouseClick 选择 QListWidgetItem

是否可以从 QListWidgetItem* 中提取行

如何将 Qlistwidgetitem 文本与图标垂直对齐?

如何在线程中为 QListWidgetItem 加载图像?