2010-06-10 3 views
2

Я вызываю 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().

Любая идея?

ответ

0

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

+0

Обе вещи, которые я уже пробовал. Если вы хотите протестировать его в демонстрационном проекте, я создал и поднял один на http://files.faunst.com/ – torsten

+0

Кажется, проблема с QGL SampleBuffers: view-> setViewport (новый QGLWidget (QGLFormat (QGL :: SampleBuffers))); Если я прокомментирую эту строку, она работает как ожидалось, за исключением того, что я могу использовать opengl для аппаратного рендеринга – torsten

0

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

graphicsWidget = new GraphicsWidget(this); 
Смежные вопросы