1

我想用 QGraphicsScene 在 QGraphicsView 中显示图像。我的代码非常基本:

QGraphicsScene* scene = new QGraphicsScene(this);
scene->addPixmap(QPixmap(qApp->applicationDirPath() +"/france.gif"));
ui->myGraphicsView->setScene(scene);
ui->myGraphicsView->fitInView(scene->sceneRect());

我的问题是我的图片尺寸不对。它非常小,比例错误,位于我的 GraphicsView 的中心。使用 qDebug 我知道我的图片加载成功,它的大小约为 100x800px。我的 graphicsView 较小,所以我想调整我的图片大小以使用我的 GraphicsView 大小进行调整。

graphicsView在主窗口Form中设置,场景在标题中声明:“QGraphicsScene场景;”

我尝试世界上一切皆有可能(我认为),但 graphicsView 总是空白或包含图片的小版本。当我复制/粘贴一些互联网代码时,我总是遇到这个问题。我也尝试使用这个例子:Qt GUI Development - Displaying a 2D grid using QGraphicsView,同样的问题......

也许我非常非常非常累,但我真的不明白出了什么问题。请帮帮我 :)

4

2 回答 2

1

sceneRect()除非您专门设置它,否则可能不是您认为的那样。此外,您aspectRatioModefitInview通话中丢失可能会扭曲图像,有时会导致“小”外观。

QGraphicsScene* scene = new QGraphicsScene(this);
QGraphicsPixmapItem p = scene->addPixmap(QPixmap(qApp->applicationDirPath() +"/france.gif"));
ui->myGraphicsView->setScene(scene);
ui->myGraphicsView->fitInView(p, Qt::KeepAspectRatio);
于 2012-10-13T06:02:58.047 回答
0

根据我的经验,如果我们在显示场景窗口之前尝试 fitInView,则显示的图像非常小。从技术上讲,sceneRect 的大小在实际显示之前不会按照我们想要的方式设置。因此,我们需要先让场景窗口出现,然后才能正确使用 fitInView。

好吧,我认为解决方案在这里可用 Qt5 C++ QGraphicsView: Images don't fit view frame

于 2013-11-23T01:41:01.497 回答