在Qt中不指定目标对象的情况下发布事件
我需要帮助了解如何在QT中使用QEvents,这让我发疯 我正在使用自定义事件编写应用程序,但正如在在Qt中不指定目标对象的情况下发布事件,qt,events,qevent,Qt,Events,Qevent,我需要帮助了解如何在QT中使用QEvents,这让我发疯 我正在使用自定义事件编写应用程序,但正如在QApplication::postEvent函数中一样,有必要指定目标对象 据我所知,可以使用 QApplication::postEvent(obj_target, QEvent myevent); 这意味着我正试图捕捉obj_target中的“myevent”事件并做一些事情 但是我需要在不指定目标对象的情况下发布事件,就像QMouseEvent或QKeyEvent一样 我的意思是,当在
QApplication::postEvent
函数中一样,有必要指定目标对象
据我所知,可以使用
QApplication::postEvent(obj_target, QEvent myevent);
这意味着我正试图捕捉obj_target中的“myevent”事件并做一些事情
但是我需要在不指定目标对象的情况下发布事件,就像QMouseEvent或QKeyEvent一样
- 我的意思是,当在一个有很多按钮的qmain窗口中单击时,我怎么能单击呢 有按钮吗?那个按钮被按下了吗
- 发布单击事件时的目标对象是什么
- 是否可以注册对象以“侦听”特定事件
事先非常感谢正如丹所说,没有一种简单的方式可以“全球”发布活动。本机事件的所有事件调度都是由专用Qt实现代码完成的 重要的区别是:
QEvent
如果没有接收对象,传递就没有意义,因为向对象发送事件实际上只意味着对该对象调用QObject::event(QEvent*)
方法。如果没有对象实例,就不可能调用此方法
如果您想要合成一个全局按键或鼠标单击事件,那么您必须找出该事件指向的对象。即:
qApp->topLevelWidgets()
枚举顶级小部件qApp->focusWidget()
将事件发送到当前关注的小部件就足够了。您需要枚举子窗口小部件,以找到树中与鼠标坐标重叠的最深窗口小部件QEvent
子类发送到您刚刚识别的小部件。传递到顶级小部件的事件将被路由到正确的子小部件请确切地告诉我们你想做什么。为什么要发布广播活动?谁收到的?由于您自己的QObject派生类将接收这些广播,我认为,使用信号槽机制非常容易。您只需
将(…)
这些接收器类连接到某个全球广播公司QObject的信号。为此,我有一个特定的单例类,我称之为GuiSignalHub
。它将所有应用范围内的信号重新组合
要触发应用程序级操作(例如打开上下文帮助)的对象只需将其信号连接到
GuiSignalHub
信号。接收器只需将GuiSignalHub
连接到其插槽。我想应该可以回答您的问题。谢谢Mat,这是一个好的开始,但我需要知道的是,是否可以注册对象以“侦听”特定事件。我的意思是,如果我发送一个“hello”事件,拥有或注册响应该事件的对象,那么在Qt中没有接收器的事件是没有意义的。也许你可以说你在这里真正想要完成什么?从您描述的内容来看,似乎您应该使用信号/插槽而不是发送QEvents。谢谢Dan,我很困惑,您是对的,要做我想做的事情,我应该使用信号/插槽,但我现在的困惑是,QMouseEvent是如何工作的,我的意思是,当我有一个QMainWindow时,QMouseEvent类如何从鼠标接收事件。我现在也有同样的问题。我想将一个事件从顶层发布到我的应用程序中(即,好像它来自外部),所以我不想指定一个特定的对象,也许除了应用程序本身?@code\u fodder这是胡说八道,除非你说的是合成GUI事件。如果这是您想要的,那么您应该看看作为Qt一部分的测试框架。@code\u fodder,或者,如果您声称它有意义,那么请说明您所追求的确切场景,以及您想要发送的“事件”的确切示例。一般来说,这都是胡说八道。但是我们有一个问题,我们的鼠标点击进入了错误的位置,我想用正确的位置重新发送它。如果可能,请让我知道,如果不可能,请让我摆脱痛苦!:o、 谢谢@你怎么知道它出现在错误的位置?假设我给你们点击的屏幕坐标,你们下一步怎么做来确定它是错的?