Встроенный QGraphicsView не скрывается после закрытия диалога

Я вызываю QDialog в режимах showNormal и showFullscreen. В обычном режиме все работает нормально. С Keyevent диалог закрывается, как ожидалось. В полноэкранном режиме после ключевого события диалоговое окно закрывается, но 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()));
}

GraphicsWidget - это виджет, содержащий QGraphcisView и Scene.

На keyPessEvent он вызовет closeEvent ().

Любая идея?


person torsten    schedule 10.06.2010    source источник


Ответы (2)


Извините, прошло некоторое время с тех пор, как я написал Qt ... но, возможно, вам нужно вызвать gwd->setModal(false) или выйти из полноэкранного режима перед закрытием диалогового окна?

person humbagumba    schedule 10.06.2010
comment
Обе вещи я уже пробовал. Если вы хотите протестировать его на демонстрационном проекте, я создал и улучшил его на files.faunst.com - person torsten; 12.06.2010
comment
Кажется, проблема с QGL SampleBuffers: view- ›setViewport (new QGLWidget (QGLFormat (QGL :: SampleBuffers))); Если я прокомментирую эту строку, она работает как ожидалось, за исключением того, что я могу использовать opengl для аппаратного рендеринга. - person torsten; 22.06.2010

Попробуйте сделать graphicsWidget дочерним по отношению к GraphicsWidgetDialog.

graphicsWidget = new GraphicsWidget(this);
person Andrew    schedule 11.10.2010