2010-06-10 6 views
2

J'appelle un QDialog dans modes, showNormal et showFullscreen. En mode normal tout fonctionne bien. Avec un Keyevent, le dialogue se ferme comme prévu. En plein écran, après un événement keyevent, le dialogue se ferme, mais QGraphicsView reste en haut. Toutes les choses que j'ai essayées (comme fermer/mettre à jour la vue) ont échoué. le point de vue sur le dessus.QGraphicsView intégré ne se cache pas après la fermeture de la boîte de dialogue

view = new QGraphicsView(scene); 
view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); 
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); 
view->setFrameStyle(QFrame::NoFrame); 
view->setBackgroundBrush(Qt::white); 
view->setRenderHints(QPainter::Antialiasing); 
view->setSceneRect(0,0,resolution.x(),resolution.y()); 

Peut-être que ma structure aidera à résoudre le problème:

Cet appel du QDialog nommé GraphicsWidgetDialog.

void DemoArrowDialog::setDemo() { 
    gwd->graphicsWidget->setListenKeyEvents(true); 
    gwd->setWindowTitle("Demo"); 
    gwd->setFixedSize(500,500); 
    gwd->restoreGeometry(settings); 
    gwd->setContentsMargins(0,0,0,0); 
    gwd->setModal(false); 
    gwd->showNormal(); 
    gwd->graphicsWidget->show(); 
    gwd->setFocus(); 
} 

void DemoArrowDialog::setFullScreenDemo() { 
    settings = gwd->saveGeometry(); 
    gwd->graphicsWidget->setListenKeyEvents(true); 
    gwd->setContentsMargins(0,0,0,0); 
    gwd->setModal(true); 
    gwd->graphicsWidget->showFullScreen(); 
    gwd->showFullScreen(); 
    gwd->setFocus(); 
} 

Telle est la définition du GraphicsWidgetDialog

GraphicsWidgetDialog::GraphicsWidgetDialog(QWidget *parent) : 
QDialog(parent) { 
graphicsWidget = new GraphicsWidget; 
QGridLayout *layout = new QGridLayout; 
layout->addWidget(graphicsWidget); 
layout->setContentsMargins(0,0,0,0); 

graphicsWidget->loadConfig(); 
graphicsWidget->loadArrowConfig("Arrow"); 

graphicsWidget->setArrowPosition(arrowPosition(arrowCenter)); 
graphicsWidget->update(); 
setLayout(layout); 

connect(graphicsWidget,SIGNAL(closeEvent()),this,SLOT(reject())); 
} 

Le GraphicsWidget est le widget qui contient le QGraphcisView et Scène

Sur keyPessEvent il émettra closeEvent().

Une idée?

Répondre

0

Désolé, cela fait un moment que j'ai écrit Qt .. mais peut-être vous devez appeler gwd->setModal(false) ou quitter le mode plein écran avant de fermer la boîte de dialogue?

+0

Les deux choses que j'ai déjà essayé. Si vous voulez le tester avec un projet de démonstration, j'ai créé et augmenté un sur http://files.faunst.com/ – torsten

+0

Il semble y avoir un problème avec les SampleBuffers QGL: view-> setViewport (new QGLWidget (QGLFormat (QGL :: SampleBuffers))); Si je commente cette ligne, cela fonctionne comme prévu, sauf que je peux utiliser opengl pour le rendu matériel – torsten

0

Essayez de faire graphicsWidget pour être un enfant de GraphicsWidgetDialog.

graphicsWidget = new GraphicsWidget(this); 
Questions connexes