方法其实Qt帮助文档已经说了,如下图。大意是如果你想让QOpenGLWidget下方的子Widget可见只需要设置Qt::WA_AlwaysStackOnTop属性就行了;如果QOpenGLWidget下方没有子Widget,只是想创建一个半透明的窗口,那么对顶层窗口(主窗口)使用传统的Qt::WA_TranslucentBackground属性就可以实现了。
下面我将给出一个例子,例子在VS2017和Qt5.9测试通过。在Qt设计师程序里把主窗口的CentralWidget提升为你自定义的QOpenGLWidget的子类,然后在内部添加几个控件。主窗口构造函数部分代码如下,Qt3DTest是主窗口类:
Qt3DTest::Qt3DTest(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); setWindowFlag(Qt::FramelessWindowHint); /* 1 */ setAttribute(Qt::WA_TranslucentBackground); /* 2 */ }
上述代码把1启用而2注释掉的运行结果如下。图中的窗口边框“3D测试程序”那里是我自己设计的边框,并不是Windows系统提供的边框。可以看出来OpenGL没渲染到的地方是黑色:
把1、2同时启用的运行结果如下。此时没有渲染到的地方变成透明色:
标签:透明,窗口,Qt,WA,背景,Qt3DTest,如下,QOpenGLWidget From: https://www.cnblogs.com/mengxiangdu/p/18096649