2012-07-01 4 views
2

я работал с этого несколькими старого примером: http://doc.qt.nokia.com/qq/qq26-openglcanvas.htmlQt диалоги в качестве OpenGL контекста

Я так понимаю, к примеру, что 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

У меня такая же проблема. метод 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();