Возможно ли иметь прозрачные QMainWindow и QOpenGLWidget с непрозрачной дочерней панелью инструментов? - PullRequest
3 голосов
/ 07 июня 2019

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

...