Вы устанавливаете правильный чистый цвет (glClearColor) и фактически делаете очистку (glClear)? Убедитесь, что ваша маска цветной записи (glColorMask) полностью включена (это также влияет на очистку). Затем вы можете проверить, устанавливает ли QT какой-то странный перенос копии в пикселях (кроме значения по умолчанию, см. GlPixelStore, glPixelTransfer и glPixelMap). Вы уверены, что получаете (и читаете) буфер RGBA в обоих случаях, а не только RGB? Наконец, вполне возможно, что расширение объекта framebuffer содержит ошибки в вашей конкретной комбинации видеокарты / драйвера, особенно если нет видимого основного окна. По крайней мере, проверьте карты от обоих поставщиков. И, конечно, всегда проверяйте glGetError после всех потенциально неудачных операций.
Перечитав свой вопрос, получаете ли вы какой-либо другой действительный рендеринг в случае, отличном от QGLWidget? Разве ясно сказать зеленый, вернуть зеленый? Потому что вполне может быть, что вы просто не инициализировали какой-либо действительный контекст OpenGL для начала в этом случае. Объекты кадрового буфера, в отличие от pbuffers, нуждаются во внешнем контексте.