Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL上下文中的Qt对话框_Qt_Opengl_Qwidget_Qdialog - Fatal编程技术网

OpenGL上下文中的Qt对话框

OpenGL上下文中的Qt对话框,qt,opengl,qwidget,qdialog,Qt,Opengl,Qwidget,Qdialog,我是从这个有点老的例子开始工作的: 我对该示例的理解是,添加到场景中带有窗口标志CustomizeWindowint和WindowTitle提示的QDialog应该有一个类似于顶级对话框的标题栏。但是,当我运行该示例时,我没有标题栏:( 我也尝试了其他几个标志,但我只看到一个没有标题栏的小QLabel 代码如下: QGraphicsView view; view.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); view.s

我是从这个有点老的例子开始工作的:

我对该示例的理解是,添加到场景中带有窗口标志CustomizeWindowint和WindowTitle提示的QDialog应该有一个类似于顶级对话框的标题栏。但是,当我运行该示例时,我没有标题栏:(

我也尝试了其他几个标志,但我只看到一个没有标题栏的小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();

我也遇到了同样的问题。
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();