【发布时间】:2018-02-04 19:59:39
【问题描述】:
我正在尝试将子小部件添加到 Qt5 中的小部件。 问题是父小部件呈现 Qt 不知道的内容,因此透明度无法正常工作。
要解决此问题,我需要使用自定义 QPainter 来呈现小部件。
在 Qt4 中,我可以通过使用属性 WA_PaintOutsidePaintEvent 并以另一种方法呈现小部件来做到这一点。
但是,在 Qt5 中,这个属性消失了。
我的尝试:
- 创建一个QWidget 并覆盖paintEvent 方法。
- 没有真正起作用(没有画任何东西),但也许这只是一个小错误。据我了解,此事件也不会阻止小部件进行自己的渲染,这是我想要阻止的。
- 创建一个 QGraphicsView 和一个 QGraphicsScene 并将小部件添加到 QGraphicsScene
- 绘制小部件和透明度作品。但是,事件(鼠标和键盘)不起作用。
【问题讨论】:
-
请出示您的代码
-
我真的不明白这有什么用。我的代码目前只是大量的实验。如果有帮助,我可以用更多代码充实示例,但考虑到我目前真的不知道自己在做什么,我有点怀疑这会有所帮助。归结为,我需要能够以某种方式将子小部件绘制到 QImage 中,并且它们仍然需要能够获取鼠标和键盘事件。
-
然后我试着先学习和理解基础知识,然后再用我刚刚经历的知识。我不太了解您的问题,例如这意味着“问题是父小部件呈现 Qt 不知道的内容”。它显示了您想要了解的内容的图像,如果您要将小部件放在另一个小部件中使用布局,如果要更改颜色,则必须更改小部件的形式,您必须覆盖方法paintEvent .
-
您能解释一下这对您意味着什么吗:将子小部件添加到小部件
-
嗯,我有一个 Qt 应用程序,它包含一个小部件层次结构,就像任何 qt 应用程序一样。但是,这些小部件之一使用 3D 库呈现 3D 图像。由于 Qt 不知道像素数据,因此只需通过执行
QWidget *widget = new QWidget(the_3d_render_widget)添加小部件确实可以将小部件添加到树中,但如果您现在使用widget->setAttribute(Qt::WA_TranslucentBackground)将背景设置为透明,则小部件将显示 Qt 应用程序下方的内容,而不是 3d 小部件的内容。
标签: c++ qt qt5 qwidget qpainter