调整窗口大小时如何`fitInView`?

时间:2016-02-11 01:46:02

标签: c++ qt window-resize

我在Qt上创建了一个图像编辑器,但我在graphicsView上显示图像时遇到了问题。

当我打开图像时,我会调用fitInView以使其与graphicsView完全吻合,这就存在问题:当我最大化窗口时,图形视图大小会发生变化,因为我设置了一个水平布局,但图像不会改变大小。

这里有一些关于我正在谈论的内容的图片:

Normal size
Maximum size

如果我在窗口已经最大化时打开文件,那一切都很好。

如何在窗口最大化时调用fitInView

1 个答案:

答案 0 :(得分:0)

非常简单,只需覆盖resizeEvent即可。

这个工作代码依赖于QGraphicsView和QGraphicsScene,缩放也可以;)

const double ZOOM_FACTOR = 1.5;
const double ZOOM_MIN = 1.0;

void ImageViewer::resizeEvent(QResizeEvent* event)
{
    if(ZOOM_MIN < m_current_zoom)
    {
        m_graph_view->setTransform(QTransform::fromScale(m_current_zoom, m_current_zoom));
    }
    else
    {
        m_graph_view->fitInView(0, 0, m_graph_scene->width(), m_graph_scene->height(), Qt::KeepAspectRatio);
    }
}


void ImageViewer::zoomIn()
{
    m_current_zoom = m_current_zoom*ZOOM_FACTOR;
    m_graph_scene->setSceneRect(m_graph_scene->itemsBoundingRect());
    m_graph_view->setTransform(QTransform::fromScale(m_current_zoom, m_current_zoom));
}


void ImageViewer::zoomOut()
{
    m_current_zoom = m_current_zoom/ZOOM_FACTOR;
    m_graph_scene->setSceneRect(m_graph_scene->itemsBoundingRect());

    if(ZOOM_MIN < m_current_zoom)
    {
        m_graph_view->setTransform(QTransform::fromScale(m_current_zoom, m_current_zoom));
    }
    else
    {
        m_graph_view->fitInView(0, 0, m_graph_scene->width(), m_graph_scene->height(), Qt::KeepAspectRatio);
    }
}