我想在透明的QMainWindow中有一个不透明的QWidget。 QMainWindow的centralWidget包含一个垂直布局的QWidget和QOpenGLWidget。 QOpenGLWidget正确绘制,渲染对象不透明,背景透明。但是,QWidget绘制时具有部分透明度,这不是我想要的。
黑色和红色背景上的应用程序示例如下所示:
问题是顶部的QWidget(带有按钮的工具栏)。这不应显示红色或黑色,而应显示不透明的实心背景色。 QOpenGLWidget应该显示当前的红色/黑色。
该屏幕快照是使用MainWindow中的以下代码拍摄的:
setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_NoSystemBackground, false);
QOpenGLWidget :: paintGL()包含:
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
我尝试对不同的小部件进行各种调用都没有成功,包括:
setStyleSheet(...)
setAutoFillBackground(...)
setAttribute(Qt::WA_AlwaysStackOnTop)
setAttribute(Qt::WA_TranslucentBackground)
setAttribute(Qt::WA_NoSystemBackground, false)
setWindowOpacity(1.0)
通过将QWidget设置为具有空父级,将其设置为无框架,然后将其手动放置在MainWindow上,我也已经达到了预期的效果。但这是凌乱的代码明智做法,并导致Windows任务栏中显示两个应用程序图标。我不想走这条骇人听闻的路线。
是否可以通过设置QWidget工具栏的正确属性来实现这一目标?
更新: 一个最小的代码示例项目可以在这里找到: https://github.com/peguse/TransparentQOpenGLWidgetApp