нужно использовать OpenGL методы для этого. К томуже рисуемый фон должен быть самым нижним слоем. Создание текстуры:
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, *tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dim, dim, 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits());
отрисовка:
float half_w, half_h;
half_w = w / 2.0;
half_h = h / 2.0;
glBindTexture(GL_TEXTURE_2D, *tex);
// draw
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f(-half_w, half_h);
glTexCoord2f(w/(GLfloat)dim, 0.0); glVertex2f(half_w, half_h);
glTexCoord2f(w/(GLfloat)dim, h/(GLfloat)dim); glVertex2f(half_w, -half_h);
glTexCoord2f(0.0, h/(GLfloat)dim); glVertex2f(-half_w, -half_h);
glEnd();
}
где dim - ширина и высота текстуры, должно быть кратно степени двойки, есстественно
w, h - геометрия окна
изображение достаточно загрузить с помощью QImage (+ заюзать QGLWidget::convertToGLFormat()) и использовать QImage::bits() как указатель на двоичные данные в glTexImage2D()