gpt4 book ai didi

c++ - 如何在 Qt 中分层独立的小部件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:10 25 4
gpt4 key购买 nike

我正在使用 Qt 创建一个应用程序,它包含一个用作应用程序背景的小部件,以及一个 float 在上方的用户控制界面。

一个类似的例子是谷歌地图, map 在背景上,控件在背景之上。

但问题是背景小部件可以更改为不同的小部件(有一个显示 map 的小部件,另一个显示视频源的小部件,...)

用户控制界面中的按钮也是如此,它们与当前背景没有直接关系,可以动态改变。

我试过使用 QStackedLayout,使用两层,背景小部件和用户控制界面。但是你不能与背景层交互,因为所有的点击都被前面的小部件阻止了。

有什么建议吗?

最佳答案

您可以使用 QObject::installEventFilter() 函数在事件流上放置一个过滤器到您的界面小部件,并拦截所有传入的鼠标单击事件。捕获这些事件后,使用过滤器功能将它们委托(delegate)给后台小部件,或将它们传递给前端界面按钮。您很可能必须使用鼠标单击的 (x,y) 坐标来确定事件是应该转到后台小部件,还是应该转到前台按钮小部件之一。

另一种选择是从 QAbstractButton(或任何您用于按钮的 QWidget)创建派生类,并重新实现鼠标点击该小部件的事件函数(即, QAbstractButton::mousePressEvent() 等)。当鼠标点击到达时,检查鼠标是否在按钮上,如果不是,则通过信号或 QCoreApplication::sendEvent() 将事件发送到后台小部件。

关于c++ - 如何在 Qt 中分层独立的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176473/

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