2013-08-21 5 views
0

J'ai un QGLWidget et j'aime attacher un QLabel pour une visualisation de mesure (fps, nombre d'objets, etc.). Je souhaite garder QGLWidget aussi propre que possible pour une réutilisation ultérieure et ne pas utiliser QGLWidget :: renderText à l'intérieur de celui-ci, mais utiliser une interface de débogage externe avec ces mesures.Attacher un QLabel devant QGLWidget

Pour l'instant je:

QVBoxLayout *l = new QVBoxLayout; 

    this->gl = new MyGLWidget; 
    l->addWidget(gl); 

    QLabel *fps = new QLabel; 
    fps->setText(QString("FPS")); 
    fps->setStyleSheet("QLabel { background-color : red; color : blue; }"); 
    fps->setParent(gl); 

    this->setLayout(l); 

Mais rien ne s'affiche .. Bien sûr, si j'ajoute le QLabel à la mise en page avec QLayout :: addWidget Je vois .. mais est pas ce que je veux ..

Quelques idées?

Répondre

0

Sans être affecté à une mise en page, le widget ne sait pas où il doit dessiner, si vous ne le lui dites pas explicitement. Vous devez appeler explicitement QWidget::setGeometry pour le positionner. Toutefois, placer des widgets Qt réguliers au-dessus d'un QGLWidget a quelques avantages. Le QGLWidget crée réellement une sous-fenêtre parentée par la fenêtre de niveau supérieur. Les widgets réguliers n'ont cependant pas leurs propres sous-fenêtres, ce qui signifie que, du point de vue du système graphique, ils sont sur le même niveau d'empilement Z que la fenêtre de niveau supérieur elle-même. Et la sous-fenêtre réelle QGLWidget a un niveau d'empilement Z plus élevé. Parenting un QLabel à la QGLWidget devrait le placer au niveau de l'empilement Z droit. Mais alors les opérations de dessin OpenGL sont différentes des opérations de dessin Qt, donc votre dessin sur QGLWidget peut gâcher le QLabel.

Simplement parlé, il y a une raison pour laquelle QGLWidget a une fonction "drawText".