Phi*_*ier 5 c++ qt event-handling signals-slots
我通常习惯.net框架,最近有机会使用C++/Qt处理项目.在这个上下文中,我想实现以下功能:(为了简化事情,我可以说我有一个ListView和一个Textbox/Textedit)
基本上我看到两个解决方案(可能还有更多):
aboutToChangeSelection(proposedSelection, vetoObj) changedSelection(newSelection)第一个信号将被发送到textedit,然后最终将利用其否决权.在此之后,相同的信号将被发送到列表本身,根据否决权执行操作,并且如果它实际改变了选择则发送第二信号.
在.NET世界中,存在这样一种机制,借助于CancelEventArgs.我知道.NET事件和Qt信号有相当不同的工作原理,但有没有相同的Qt相同的效果?
非常感谢您的帮助!
如果您使用 aQListWidget而不是 a QListView,那么您可以执行以下操作:
QListWidget::itemPressed ( QListWidgetItem * item )而不是表示该项目已更改的信号(即currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )在我的示例中)currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous )该信号仅用于记住当前和最后一项。现在有一个问题。首先会收到哪个信号?文档中未指定,可以按任何顺序。如果用户在某个项目上A并单击该项目B,则您希望最后一个项目处于您正在处理的A时刻,而当前项目处于B您正在处理的时刻itemPressed。所以你要先处理currentItemChanged。幸运的是,您可以使用 use Qt::DirectConnectionforcurrentItemChanged和 use Qt::QueuedConnectionforitemPressed
选择:
您可以在列表小部件上使用事件过滤器。该过滤器将执行您在几个步骤中描述的处理。如果用户单击接受,您将事件发送到列表视图。如果用户拒绝,您将阻止该事件。我不确定,但事件可能没有在过滤器中处理,这将使这种替代方案不可行。
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |