我发现了有关自定义QEvents
的多个问题。因此,从Qt 4开始,我们必须从QEvent
派生并注册我们的自定义类型。周围有一些样本。
我想要的是包含自定义数据的QWheelEvent
。所以这个活动应该可以在任何地方使用,作为一个正常的" QWheelEvent
但如果我愿意,可以检查我的CustomWheelEvent
类型并从中检索数据。
问题是我不知道如何注册该类型,因为QWheelEvent
的构造函数不提供设置事件类型的可能性。
查看QEvent
的内部结构我可以简单地将受保护的成员Type t设置为registerEventType()
返回的事件类型。这有副作用吗?
如果我只是从QWheelEvent
派生,我也可以使用dynamic_cast
来查明是否是我自己的事件,其中包含我的自定义数据。检查类型后的简单静态转换应该更好。
对此有何想法?
编辑:我已尝试使用dynamic_casts
的方法,但演员似乎失败了。如果Qt在内部对事件进行深度复制,则可以创建新的QWheelEvent
并通过事件系统而不是CustomWheelEvent
传递。这样,我自己的数据(在CustomWheelEvent
中定义)被剥离对象,只处理基类(QWheelEvent
)。我原本以为指针按原样使用,所以我可以依赖dynamic_cast
。欢迎提供更多相关信息!
答案 0 :(得分:0)
阅读本文: Qt: Defining a custom event type
我认为您确实想要注册该事件,并且它将返回一个新的未使用类型(数字)。在那里的示例中,静态对象将值设置为QEvent :: None。我在解决方案中看到的主要问题是它不是线程安全的,所以,一定要以某种方式使这个线程安全(比如可能在事情开始之前调用静态类型方法,以便它们在被用于之前被初始化)多线程方式)。