我通常习惯于 .net 框架,最近有机会使用 C++/Qt 进行项目。在这种情况下,我想实现以下功能:(为了简化事情,假设我有一个 ListView 和一个 Textbox/Textedit)
- 如果我选择 ListView 的一个项目-> 在 textedit 中显示相应的文本(完成)
- 如果我编辑文本并单击列表中的另一个项目-> 显示一个对话框,询问是否保存或取消更改(完成)。textedit 从列表中获取一个信号,告诉它所选项目已更改。
- 如果用户按下保存 -> 将其保存并刷新列表中的项目,则用户单击的新项目将在列表中被选中(完成)
- 如果用户按下取消 - >不要选择用户点击的其他项目(这是我的问题所在)
基本上我看到了两种解决方案(可能还有更多):
- 从 textedit 向列表发送回信号,告诉列表恢复之前的选择。我个人不太喜欢这个解决方案,因为我必须将它们结合得更牢固(列表向 textedit 发送信号,现在也反过来)。此外,这种“强制”选择恢复可能会再次触发必须再次阻止的后续信号......
- 一个更好的解决方案(我认为)是在信号中有一些否决机制。我可以想象这个列表发送两个信号:
- 让我们打电话给第一个
aboutToChangeSelection(proposedSelection, vetoObj)
- 动作完成后的另一个:
changedSelection(newSelection)
- 让我们打电话给第一个
第一个信号将被发送到 textedit,然后最终会使用它的否决权。在此之后,相同的信号将被发送到列表本身,根据否决执行操作,如果它实际上改变了选择,则发送第二个信号。
在 .NET 世界中存在这样一种机制,在 .NET 的帮助下CancelEventArgs
。我知道 .NET 事件和 Qt 信号具有完全不同的工作原理,但是有没有任何 Qt 等效于实现相同的效果?
非常感谢您的帮助!