3

我想在透明的 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 设置为具有 null 父级,将其设置为无框架并手动将其定位在 MainWindow 上,我也已在一定程度上达到了预期的效果。但这是混乱的代码,会导致 Windows 任务栏中显示两个应用程序图标。我不想走这条骇人听闻的路线。

有没有办法通过设置 QWidget 工具栏的正确属性来实现这一点?

更新:可以在这里找到一个最小的代码示例项目: https ://github.com/peguse/TransparentQOpenGLWidgetApp

4

0 回答 0