gpt4 book ai didi

c++ - 如何将 QEvents 传递给子部件?

转载 作者:太空狗 更新时间:2023-10-29 21:33:22 26 4
gpt4 key购买 nike

情况如下:

我有一个从 QTabWidget 子类化的自定义小部件,我已经实现它以接受文件的 QDropEvents。当文件放在 TabWidget 上时,它们会被打开进行编辑。这部分工作正常。但是,我想将拖放功能作为编辑器的一部分来实现(就像 LabView 式 GUI 一样)。我已在 EditorWidget 上正确实现了事件处理程序和 acceptsDrops,但 TabWidget 接收所有事件并尝试将它们作为文件处理。我可以通过 mimedata 区分文件相关事件和编辑器事件,但我不知道如何将事件从 TabWidget 传递到适当的 EditorWidget

所以问题:

如何将 QDropEvent 从从系统接收到它的小部件传递到它拥有的另一个小部件?或者,我如何根据所述事件的内容告诉系统哪个小部件应该接收该事件?

我尝试过的:

我无法调用子项的 dropEvent 方法,因为它受到保护。我可以创建一系列我自己的方法来传递事件,但这似乎是多余且脆弱的。我研究过安装 EventFilter,但据我所知,它只会丢弃事件,并没有说“不是我试试其他人。”

预先感谢您的协助!

最佳答案

有趣!我认为在父窗口小部件中接受事件,然后尝试将其转发给子窗口小部件,在架构上不是正确的方法。它基本上会违反封装(对象处理自己的事件)。

如果我是你,我会调查为什么子部件没有首先看到事件。子 widget 位于其父 widget 之上,因此您的子 widget 应该首先参加事件。您是否调用了 setAcceptDrops(true)

修复该问题后,您可以在子窗口小部件事件处理程序中分析事件并调用 event->ignore() 是否应将事件转发给父 QTabWidget。如果您不调用 ignore(), child 将“消费”该事件,并且不会将其传播给 parent !

这是一篇关于事件传播的旧博客文章,可能会有所帮助:

http://blog.qt.io/blog/2006/05/27/mouse-event-propagation/

关于c++ - 如何将 QEvents 传递给子部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407921/

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