2

QDialogを、showNormalとshowFullscreenのモードで呼び出します。通常モードでは、すべて正常に動作します。キーイベントを使用すると、ダイアログは期待どおりに閉じます。フルスクリーンでは、キーイベントの後、ダイアログは閉じますが、QGraphicsViewはトップのままになります。私が試したすべてのこと(ビューを閉じる/更新するなど)は失敗しました。上のビューsta。

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());

たぶん私の構造は問題を解決するのに役立つでしょう:

これにより、GraphicsWidgetDialogという名前のQDialogが呼び出されます。

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()を発行します。

何か案が?

4

2 に答える 2

0

申し訳ありませんが、Qtを作成してからしばらく経ちましたがgwd->setModal(false)、ダイアログを閉じる前に、フルスクリーンモードを呼び出すか、終了する必要がありますか?

于 2010-06-10T11:09:29.180 に答える
0

graphicsWidgetをGraphicsWidgetDialogの子になるようにしてみてください。

graphicsWidget = new GraphicsWidget(this);
于 2010-10-11T16:24:50.773 に答える