我正在尝试将子窗口小部件添加到Qt5中的窗口小部件。 问题是父窗口小部件呈现Qt不知道的内容,因此透明度无法正常工作。
要解决这个问题,我需要使用自定义QPainter来渲染小部件
在Qt4中,我可以通过使用属性WA_PaintOutsidePaintEvent并以另一种方法呈现窗口小部件来完成此操作。
但是,在Qt5中,这个属性消失了。
我尝试了什么:
答案 0 :(得分:0)
我最终做了什么并且工作正常:
我正在使用自定义顶级窗口小部件而无需其他功能,以便更轻松地处理鼠标和键盘 这个小部件没有父节点,并且使用QImage将其子节点渲染到内存中并叠加为图像。透明的方式就是这样。这里重要的是WA_NoSystemBackground属性 为了使事件有效,我在应用程序上安装了一个事件过滤器,并将事件传递给我的自定义小部件中的小部件。 我将免除你的详细信息,我打算在今年晚些时候将代码公开,并且我会在完成后添加一个链接。
然而,传递事件时有两个重要注意事项:
首先,为了防止无限的递归循环,因为你的过滤器也会捕获你发送的事件,我已经检查了接收对象是否是一个小部件,如果是,我只是检查这个小部件的topLevelWidget是否是我的一个实例自定义窗口小部件类,如果是,则忽略该事件
其次,简单地传递鼠标事件并不会使鼠标过度工作。有单独的悬停事件,你必须自己照顾。