2 votes

Dialogues Qt dans un contexte OpenGL

Je travaillais à partir de cet exemple un peu ancien : http://doc.qt.nokia.com/qq/qq26-openglcanvas.html

Si je comprends bien l'exemple, le QDialog ajouté à la scène avec les drapeaux de fenêtre CustomizeWindowHint et WindowTitle hint devrait avoir une barre de titre comme un dialogue de niveau supérieur. Cependant, lorsque j'exécute l'exemple, je n'ai aucune barre de titre :(

J'ai également essayé plusieurs autres drapeaux, mais je ne vois qu'un petit QLabel sans barre de titre.

Code ci-dessous :

QGraphicsView view;

view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
view.setScene(new MyGLScene(0));

QDialog *dialog = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint
                              | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint);

dialog->setWindowOpacity(0.8);
dialog->setWindowTitle("Sample");
dialog->setLayout(new QVBoxLayout);

dialog->layout()->addWidget(new QLabel("Hello!"));
dialog->layout()->addWidget(new QPushButton("Ok", 0));

view.scene()->addWidget(dialog);
view.show();

1voto

Jan-Philip Loos Points 73

J'ai le même problème. Le site addWidget La méthode enveloppe le widget dans un QGraphicsProxyWidget . Pour certaines raisons, le QGraphicsProxyWidget semble ignorer les drapeaux ou ne les laisse pas passer.

Voici comment je l'ai réparé avec l'utilisation de :

view.scene()->addWidget(dialog, , dialog->windowFlags());

votre code modifié :

QGraphicsView view;

view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
view.setScene(new MyGLScene(0));

QDialog *dialog = new QDialog(0, Qt::CustomizeWindowHint | Qt::WindowTitleHint
                              | Qt::WindowCloseButtonHint |         Qt::WindowMinimizeButtonHint);

dialog->setWindowOpacity(0.8);
dialog->setWindowTitle("Sample");
dialog->setLayout(new QVBoxLayout);

dialog->layout()->addWidget(new QLabel("Hello!"));
dialog->layout()->addWidget(new QPushButton("Ok", 0));

view.scene()->addWidget(dialog, , dialog->windowFlags());
view.show();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X