(I used Qt::FramelessWindowHint to disable standard border
I had a similar problem where I wanted to paint on a toplevel widget and have only the painted part appear. setWindowOpacity changed the opacity of the painted part, which I didn't want.
this->setAttribute(Qt::WA_TranslucentBackground, true);
changed the opacity of the widget without the painted part. I just tried tossing on a button, and that also displays perfectly opaque. So you should be able to display other children however you like.