如何强制QGraphicsView/QGraphicsScene缩小到最小尺寸

 银杰声群当_993 发布于 2023-02-08 02:17

我使用QGraphicsView/QGraphicsScene在Qt中绘图.只要我不断绘制更大的东西,缩放和适合工作得体.但是,当boundign矩形大小减小时View不会.它只显示相同(或更大的区域).

在我在视图上重新绘制一个较小的场景之前,我调用以下命令:

mpScene->clear();
mpScene->setSceneRect(QRectF());
mpView->setSceneRect(QRectF());
mpView->resetMatrix();
mpView->fitInView(this->sceneRect(),Qt::KeepAspectRatio);

唉,视图显示的画布仍在不断增长.我错过了什么?

场景和视图配置如下(仅为完整性而给出):

mpView->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
mpView->setCacheMode(QGraphicsView::CacheBackground);

mpView->setScene(mpScene);
mpView->setWindowFlags(Qt::FramelessWindowHint);

mpView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
mpView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
mpView->setFrameStyle(QFrame::NoFrame);

mpView->setAutoFillBackground(false);
mpView->setAttribute(Qt::WA_OpaquePaintEvent, true);
mpView->setAttribute(Qt::WA_NoSystemBackground, true);

//enabling OpenGl if possible
QGLFormat fmt = QGLFormat::defaultFormat();
fmt.setSampleBuffers(true);
fmt.setDoubleBuffer(true);
fmt.setSamples(256);
fmt.setDirectRendering(true);
QGLWidget* pGlWidget = new QGLWidget(fmt);
if(pGlWidget->isValid()) mpView->setViewport(pGlWidget);
else delete pGlWidget;
mpView->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);

注意:版本是Qt4.8

1 个回答
  • 您可以通过控制基础场景的大小setSceneRect.在我的应用程序中,我已经进行了子类化QGraphicsScene,在添加/删除函数中,我执行此操作:

    setSceneRect(itemsBoundingRect());
    

    这将计算场景中项目的新边界矩形,并强制场景为该大小.

    2023-02-08 02:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有