2010-06-10 3 views
2

나는 showNormal 및 showFullscreen 모드로 QDialog를 호출합니다. 정상 모드에서는 모든 것이 정상적으로 작동합니다. Keyevent를 사용하면 대화 상자가 예상대로 닫힙니다. 전체 화면에서 키 이벤트가 지나면 대화 상자가 닫히지 만 QGraphicsView는 계속 유지됩니다. 내가 시도한 모든 것 (보기 닫기/업데이트)이 실패했습니다. 보기 sta 상단에.묻힌 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의 정의이다 keyPessEvent 켜기 QGraphcisView 및 장면

는 closeEvent을 방출한다()를 포함하는 위젯이다.

아이디어가 있으십니까?

답변

0

죄송합니다. Qt를 작성한 이후로 잠시 있었지만 대화 상자를 닫기 전에 gwd->setModal(false)으로 전화하거나 전체 화면 모드를 종료해야 할 필요가 있습니까?

+0

두 가지를 모두 시도했습니다. 데모 프로젝트에서 테스트하고 싶다면 http://files.faunst.com/에서 생성하고 올렸습니다. – torsten

+0

QGL SampleBuffers에 문제가있는 것 같습니다 : view-> setViewport (new QGLWidget (QGLFormat (QGL :: SampleBuffers)))); 이 줄에 주석을 달아 주면 하드웨어 렌더링을 위해 opengl을 사용할 수 있다는 것을 제외하고는 예상대로 작동합니다 – torsten

0

graphicsWidget을 GraphicsWidgetDialog의 자식으로 사용해보십시오.

graphicsWidget = new GraphicsWidget(this); 
관련 문제