Qt QGraphicsScene :: setSceneRect()实际上没有设置场景rect

时间:2018-01-27 23:51:56

标签: c++ qt qgraphicsscene


我实现了一个简单的图像查看器小部件。它工作正常,但是当我尝试上传图片然后用较小的图片替换它时,它不会居中。我做了一些小的研究,发现问题出在sceneRect QGraphicsScene。因此,每次上传图像之前,我都会编写一些代码来重置它。我还在行之间添加了一些qDebug()内容,以确保它确实将此rect设置为null。不幸的是,即使在调用此setSceneRect()函数后它仍保持不变。这里有一些代码可以更好地理解我的问题:

void function_which_uploads_and_show_images()
{
    QString file_path = QFileDialog::getOpenFileName(this, "title", "/", "*.jpg");
    this->image = QPixmap(file_path);
    this->scene->clear();
    this->scene->setSceneRect(QRectF()); //setting sceneRect to the null rect

    // here goes some code to scale the image if necessary

    this->scene->addPixmap(file_path);
}

我的问题是:我如何重置 sceneRect 所以每次上传图片时都会居中?

2 个答案:

答案 0 :(得分:0)

您只是首先提供部分代码,以确定图像如何真正“自动”居中。您可能希望查看类似QGraphicsLayout的内容来管理定位。

但是要解决这个问题,您可以尝试在视图上设置场景矩形。您可能只需要在初始时执行一次。

来自QGraphicsView::sceneRect doc:

  

场景矩形定义场景的范围,在视图中,这意味着您可以使用滚动条导航的场景区域。

     

如果未设置,或者设置了空QRectF,则此属性与QGraphicsScene :: sceneRect具有相同的值,并且它随QGraphicsScene :: sceneRect而变化。否则,视图的场景rect不受场景的影响。

     

默认情况下,此属性在原点包含一个矩形,宽度和高度为零。

答案 1 :(得分:0)

对于这个问题,它可能不是一个非常干净的解决方案,但是可以执行以下操作来重置场景矩形:

scene = new QGraphicsScene(this);
view->addScene(scene);

它有效,但我几乎可以肯定它可以通过另一种方式实现,所以如果您对此问题有更好的答案,请在此处发布。