如何在Qt中创建自定义轮事件?

时间:2015-10-19 07:18:48

标签: c++ qt

我发现了有关自定义QEvents的多个问题。因此,从Qt 4开始,我们必须从QEvent派生并注册我们的自定义类型。周围有一些样本。

我想要的是包含自定义数据的QWheelEvent。所以这个活动应该可以在任何地方使用,作为一个正常的" QWheelEvent但如果我愿意,可以检查我的CustomWheelEvent类型并从中检索数据。

问题是我不知道如何注册该类型,因为QWheelEvent的构造函数不提供设置事件类型的可能性。

查看QEvent的内部结构我可以简单地将受保护的成员Type t设置为registerEventType()返回的事件类型。这有副作用吗?

如果我只是从QWheelEvent派生,我也可以使用dynamic_cast来查明是否是我自己的事件,其中包含我的自定义数据。检查类型后的简单静态转换应该更好。

对此有何想法?

编辑:我已尝试使用dynamic_casts的方法,但演员似乎失败了。如果Qt在内部对事件进行深度复制,则可以创建新的QWheelEvent并通过事件系统而不是CustomWheelEvent传递。这样,我自己的数据(在CustomWheelEvent中定义)被剥离对象,只处理基类(QWheelEvent)。我原本以为指针按原样使用,所以我可以依赖dynamic_cast。欢迎提供更多相关信息!

1 个答案:

答案 0 :(得分:0)

阅读本文: Qt: Defining a custom event type

我认为您确实想要注册该事件,并且它将返回一个新的未使用类型(数字)。在那里的示例中,静态对象将值设置为QEvent :: None。我在解决方案中看到的主要问题是它不是线程安全的,所以,一定要以某种方式使这个线程安全(比如可能在事情开始之前调用静态类型方法,以便它们在被用于之前被初始化)多线程方式)。