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

标签 c++ qt user-interface

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

相关文章:

c++ - 将 cuBLAS 与来自 Thrust 的复数结合使用

c++ - 输入一定数量后的垃圾值

qt - 使用 Microsoft Enterprise WDK 设置 qtcreator

user-interface - Matplotlib 绘图用滚轮缩放

java - Vaadin 中带 slider 的水平按钮栏

c++ - “lambda capture”在常规功能上吗?

c++ - parallel_for/parallel_for_each 内部或外部的类对象?

c++ - 在不同的 qt 版本中使用相同的 qt .ui 文件

c++ - QT-Graphics - 如何限制项目的移动

java - 尝试更新我的 JFrame,为什么重绘不起作用?