If you only get a black box, then you have some error in the GL rendering code. Do you actually use GL calls to do the drawing on the widget?

BTW. I don't see how multiple GL widgets would prevent you from using renderPixmap. Could you explain that?