Возможно ли иметь прозрачные 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