我正在使用 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/