对话框关闭后嵌入式 QGraphicsView 不隐藏
Posted
技术标签:
【中文标题】对话框关闭后嵌入式 QGraphicsView 不隐藏【英文标题】:Embedded QGraphicsView do not hide after Dialog closes 【发布时间】:2010-06-10 10:39:21 【问题描述】:我在模式、showNormal 和 showFullscreen 中调用 QDialog。在正常模式下一切正常。使用 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());
也许我的结构将有助于解决问题:
这调用了名为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的Widget
在 keyPessEvent 上,它会发出 closeEvent()。
有什么想法吗?
【问题讨论】:
【参考方案1】:抱歉,我已经有一段时间没有编写 Qt 了。但也许您需要致电 gwd->setModal(false)
或在关闭对话框之前离开全屏模式?
【讨论】:
这两件事我都已经尝试过了。如果您想在演示项目中对其进行测试,我在 files.faunst.com 上创建并升级了一个 QGL SampleBuffers 似乎有问题: view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));如果我评论这一行,它会像预期的那样工作,除了我可以使用 opengl 进行硬件渲染【参考方案2】:尝试使 graphicsWidget 成为 GraphicsWidgetDialog 的子级。
graphicsWidget = new GraphicsWidget(this);
【讨论】:
以上是关于对话框关闭后嵌入式 QGraphicsView 不隐藏的主要内容,如果未能解决你的问题,请参考以下文章
在 QGraphicsView/QGraphicsScene 中移动 QGraphicsProxyWidget 中的嵌入式小部件
Qt Embedded:使用 QGraphicsView 和 QGraphicsWidget 在两个屏幕上显示
重新实现 mousePressEvent 后无法在 QGraphicsView 中拖动项目
移动到 QGraphicsView 时创建没有窗口打开和关闭的 pyqtgraph 图