OpenGL上下文中的Qt对话框

时间:2012-07-01 19:02:49

标签: qt opengl qwidget qdialog

我在这个有点老的例子中工作: http://doc.qt.nokia.com/qq/qq26-openglcanvas.html

我理解这个例子的方式是QDialog添加到场景中的窗口标志CustomizeWindowHint和WindowTitle提示应该有一个标题栏,如顶级对话框。但是,当我运行该示例时,我没有标题栏。 :(

我也尝试了其他几个标志,但我只看到一个没有标题栏的小QLabel。

以下代码:

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();

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 addWidget方法将窗口小部件包装为QGraphicsProxyWidget。出于某些原因,QGraphicsProxyWidget似乎忽略了标志或者没有通过标志。

这就是我使用以下方法修复它的方法:

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

修改后的代码:

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();