gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:36 27 4
gpt4 key购买 nike

我使用 QGraphicsView/QGraphicsScene 在 Qt 中绘图。只要我继续绘制更大的东西,缩放和适合就可以正常工作。但是,当边界矩形尺寸减小时 View 没有。它只是显示相同(或更大的区域)。

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

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

唉, View 显示的 Canvas 仍在不断增长。我错过了什么?

场景和 View 配置如下(仅出于完整性考虑):

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

最佳答案

您可以通过setSceneRect 控制底层场景的大小。在我的应用程序中,我对 QGraphicsScene 进行了子类化,在添加/删除函数中我这样做:

setSceneRect(itemsBoundingRect());

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

关于c++ - 如何强制 QGraphicsView/QGraphicsScene 缩小到最小尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com