2

私はこのやや古い例から作業していました:http: //doc.qt.nokia.com/qq/qq26-openglcanvas.html

この例を理解する方法は、ウィンドウフラグCustomizeWindowHintと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();
4

1 に答える 1

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();
于 2012-08-18T16:24:05.367 に答える