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?
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
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