如何在我的 Qt 窗口中创建一个“洞”?

Posted

技术标签:

【中文标题】如何在我的 Qt 窗口中创建一个“洞”?【英文标题】:How do I create a "hole" in my Qt window? 【发布时间】:2020-07-07 01:39:24 【问题描述】:

我想在我的 QMainWindow 中创建一个“洞”。

假设黑色矩形是 QMainWindow 的“洞”。矩形内应该是 QMainWindow 后面的任何东西。例如,如果 QMainWindow 在我的桌面顶部打开,那么矩形内部应该是我桌面背景图像的一部分。

有什么办法可以实现吗?

【问题讨论】:

如果在“洞”中按下鼠标按钮会发生什么?您的应用程序应该接收事件还是应该转到通过孔可见的任何应用程序窗口? 应用程序不应收到该事件。 “洞”后面的任何窗口都应该处理该事件。 【参考方案1】:

您应该使用QWidget::setMaskQWindow::setMask。有一个 Qt 示例:https://doc.qt.io/qt-5/qtwidgets-widgets-shapedclock-example.html

【讨论】:

谢谢。另一个问题是,因为示例说“设置某些窗口标志将导致窗口装饰(标题栏、窗口框架、按钮)被禁用”。所以如果我使用 QWidget::setMask 并且还想要一个标题栏,我应该自己实现一个吗? @Arsenal591,你不必设置无框提示。你只需要敷面膜。你的情况没有必要让整个寡妇无框 但是即使没有设置无框提示,窗口仍然是无框的。看起来 setMask() 总是会导致窗口无框 @Arsenal591 明白了。好的。您必须自己实现它。拖动很容易实现、关闭、最大化、最小化——另外,由于存在相应的插槽。

以上是关于如何在我的 Qt 窗口中创建一个“洞”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQT5 中创建导航栏

如何在 ui 窗口中创建草图区域

如何在 Mac 和 Netbeans 中创建 Qt 项目

如何在 Qt 中创建 3D 对象模型的 2D 切片?

在 qt 中创建一个带有图像形状的窗口

QT中想在子线程中创建对话窗口怎么建