Я вызываю QDialog в режимах, showNormal и showFullscreen. В нормальном режиме все работает нормально. С помощью Keyevent диалог закрывается, как ожидалось. В полноэкранном режиме после нажатия клавиши диалог закрывается, но QGraphicsView останется на вершине. Все, что я пробовал (например, закрытие/обновление представления), не удалось. Вид сверху.Встроенный QGraphicsView не скрывается после закрытия диалогового окна
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());
Может быть, моя структура поможет решить проблему:
Это называет QDialog имени 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();
}
Это Определение 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()));
}
The GraphicsWidget это виджет, который содержит QGraphcisView и Scene
На keyPessEvent он будет излучать CloseEvent().
Любая идея?
Обе вещи, которые я уже пробовал. Если вы хотите протестировать его в демонстрационном проекте, я создал и поднял один на http://files.faunst.com/ – torsten
Кажется, проблема с QGL SampleBuffers: view-> setViewport (новый QGLWidget (QGLFormat (QGL :: SampleBuffers))); Если я прокомментирую эту строку, она работает как ожидалось, за исключением того, что я могу использовать opengl для аппаратного рендеринга – torsten