C++ QGraphicsItem缩放产生过大的边界矩形

C++ QGraphicsItem缩放产生过大的边界矩形,c++,qt,qgraphicsview,C++,Qt,Qgraphicsview,问题:当使用带有标志QGraphicsItem::itemIgnorestTransformations的QGraphicsItem时,视图不能正确缩放并显示不必要的滚动条 要复制,请在表单上放置QGraphicsView,并使用以下代码: #include <QGraphicsScene> #include <QGraphicsTextItem> MainWindow::MainWindow(QWidget *parent) : QMainWindow(par

问题:当使用带有标志
QGraphicsItem::itemIgnorestTransformations
QGraphicsItem
时,视图不能正确缩放并显示不必要的滚动条

要复制,请在表单上放置
QGraphicsView
,并使用以下代码:

#include <QGraphicsScene>
#include <QGraphicsTextItem>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGraphicsScene* scene = new QGraphicsScene();

    // Set the scene to the view. Has to be done before
    // transformation in order for the problem to occur.
    ui->graphicsView->setScene(scene);

    // Add some text, make it transformation-invariant.
    QGraphicsTextItem* txt = scene->addText("Hello World!");
    txt->setFlag(QGraphicsItem::ItemIgnoresTransformations);

    // Scale the scene, re-calculate the bounding rect.
    ui->graphicsView->scale(10, 5);
    QRectF rect = scene->itemsBoundingRect();
    scene->setSceneRect(rect);
}
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
qgraphicscene*场景=新的qgraphicscene();
//将场景设置为视图。必须在
//转换以使问题发生。
ui->graphicsView->setScene(场景);
//添加一些文本,使其变换不变。
QGraphicsTextItem*txt=场景->添加文本(“你好,世界!”);
txt->setFlag(QGraphicsItem::ItemIgnoresTransformations);
//缩放场景,重新计算边界矩形。
用户界面->图形视图->比例(10,5);
QRectF rect=scene->itemsBoundingRect();
场景->设置场景竖立(矩形);
}
这也适用于其他项目,如
QGraphicsEllipseItem
qgraphicsrecitem

不设置标志(只需注释掉行
txt->setFlag…
),输出与预期一致:

但是,当设置标志时,我希望滚动条消失,因为文本显然适合视图。但实际上它看起来是这样的:

我知道场景只会自动增长,但不会收缩到其内容,因此我在最后显式地设置场景矩形。但即使这样也无济于事

在我看来,这似乎是Qt中的一个bug,但也许我只是误解了一些东西。你知道问题(和解决方案)是什么吗

使用Qt5.5,Ubuntu 14.04


是的,这个场景永远不会被释放。这当然不是生产代码;-)

我有一个类似的问题,就是在QImage上面的addLineaddEllipse

问题似乎来自QGraphicsItem::ItemIgnorestTransformations标志,该标志似乎放大了场景以保持“变换”对象的放置,但随后忽略了对放置和大小的变换,但是由于错误地更改了场景比例,已经造成了损坏

我有一个可以帮助你的工作。 如果在定位忽略变换的对象后将场景比例重置为已知的正确值。这样可以避免你的问题

例如:
m_firstImageScene->SetscenInstruction(m_firstImageRect)

我在QImage上面的addLineaddEllipse也有类似的问题

问题似乎来自QGraphicsItem::ItemIgnorestTransformations标志,该标志似乎放大了场景以保持“变换”对象的放置,但随后忽略了对放置和大小的变换,但是由于错误地更改了场景比例,已经造成了损坏

我有一个可以帮助你的工作。 如果在定位忽略变换的对象后将场景比例重置为已知的正确值。这样可以避免你的问题

例如: m_firstImageScene->SetscenInstruction(m_firstImageRect)