У меня есть полноразмерный QGLWidget, который рисует фон приложения с помощью QPainter (. В будущем он может измениться на собственные команды openGL ).
Поверх этого QGLWidget я использую QWidgets (non -GL )для элементов пользовательского интерфейса. Это, например, QLineEdits и QPushButtons. Я поместил их в специально нарисованный QWidget, который использует полупрозрачный фон -. PaintEvents QLineEdit и QPushButton перезаписываются и также используют полупрозрачный фон -.
Весь пользовательский интерфейс должен выглядеть следующим образом(Это снимок экрана, на котором я отключил OpenGL и использовал QWidget вместо QGLWidget для фона. Обратите внимание на полупрозрачную -верхнюю полосу, которая также рисует тень (в своей области )):
. Когда QLineEdit находится в фокусе, он должен иметь более высокую непрозрачность, но не быть полностью непрозрачным :
. Итак, теперь, когда OpenGL включен (Фоном является QGLWidget ), полупрозрачные -виджеты выше не рисуются поверх фона, но на (это похоже на )неинициализированные данные. Изображение, сияющее через верхнюю панель, иногда представляет собой все окно, а иногда и другие окна, которые в данный момент находятся на моем рабочем столе.
В настоящее время это выглядит следующим образом(На этом снимке экрана данные, на которых нарисованы полупрозрачные -операции рисования, кажутся изображением самого виджета со смещением.):
Когда я написал текст в строку edit (здесь :"Это какой-то текст, который был там раньше!" ),удалил его и вернул фокус фоновому виджету (, чтобы появился значок лупы и текст-заполнитель ), ранее окрашенные объекты по-прежнему просвечивают (Обратите внимание, что видимая граница должна , а не быть видимым больше, но также все еще просвечивать):
Таким образом, проблема :заключается в том, что вместо того, чтобы рисовать поверх базовых виджетов, полупрозрачный виджет -рисуется поверх старых результатов , изначально являясь чем-то вроде «неинициализированной памяти».
Почему это происходит? Как я могу решить проблему?
Что нужно знать, прежде чем отвечать:
AbstractMapView
, который имеет несколько конкретных классов представления карты. Все окно представляет собойAbstractView
(также есть несколько конкретных представлений ), которые содержат как конкретное представление карты, так и виджеты наложения, составленные так, как решает само решение. Поэтому я не хочу, чтобы логика виджетов наложения была частью базового представления карты. (Надеюсь, вы поняли это, так как это немного сложно.)