gpt4 book ai didi

c++ - 如何在 Qt 中创建自定义车轮事件?

转载 作者:太空狗 更新时间:2023-10-29 23:14:34 25 4
gpt4 key购买 nike

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

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

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

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

如果我只是从 QWheelEvent 派生,我还可以使用 dynamic_cast 来确定它是否是我自己的事件携带我的自定义数据。不过,在检查类型后进行简单的静态转换应该会更好。

对此有什么想法吗?


编辑:我尝试过使用dynamic_casts 的方法,但转换似乎失败了。如果 Qt 在内部深度复制事件,那么这是可能的,以便创建新的 QWheelEvent 并通过事件系统传递,而不是我的 CustomWheelEvent。这样,我自己的数据(在 CustomWheelEvent 中定义)被从对象中剥离,仅处理基类 (QWheelEvent)。我本来以为指针就这么用,这样我就可以依赖dynamic_cast了。感谢您提供更多相关信息!

最佳答案

读这个: Qt: Defining a custom event type

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

关于c++ - 如何在 Qt 中创建自定义车轮事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com