Возможно ли иметь прозрачные QMainWindow и QOpenGLWidget с непрозрачной дочерней панелью инструментов?

Я хотел бы иметь непрозрачный QWidget в прозрачном QMainWindow. CentralWidget QMainWindow содержит 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

0 ответов

Другие вопросы по тегам