是否可以使用带有不透明子工具栏的透明QMainWindow和QOpenGLWidget?

时间:2019-06-07 09:22:51

标签: c++ qt opengl qopenglwidget

我想在透明的QMainWindow中有一个不透明的QWidget。 QMainWindow的centralWidget包含一个垂直布局的QWidget和QOpenGLWidget。 QOpenGLWidget正确绘制,渲染对象不透明,背景透明。但是,QWidget绘制时具有部分透明度,这不是我想要的。

黑色和红色背景上的应用程序示例如下所示:

enter image description here

问题是顶部的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

0 个答案:

没有答案