C++ 调整窗口大小时如何“fitInView”?

C++ 调整窗口大小时如何“fitInView”?,c++,qt,window-resize,C++,Qt,Window Resize,我已经在Qt上创建了一个图像编辑器,但是在图形视图上显示图像时遇到了一个问题 当我打开图像时,我调用fitInView,使其与graphicsView很好地匹配,问题在于:当我最大化窗口时,由于我设置了水平布局,图形视图的大小会改变,但图像的大小不会改变 下面是一些关于我所说内容的图片: 如果我在窗口已经最大化时打开文件,一切都很好 当窗口最大化时,如何调用fitInView?非常简单,只需覆盖resizeEvent 此工作代码依赖于QGraphicsView和QGraphicscene,z

我已经在Qt上创建了一个图像编辑器,但是在
图形视图上显示图像时遇到了一个问题

当我打开图像时,我调用
fitInView
,使其与
graphicsView
很好地匹配,问题在于:当我最大化窗口时,由于我设置了水平布局,图形视图的大小会改变,但图像的大小不会改变

下面是一些关于我所说内容的图片:


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


当窗口最大化时,如何调用fitInView?

非常简单,只需覆盖resizeEvent

此工作代码依赖于QGraphicsView和QGraphicscene,zoom也可以工作;)

const双缩放系数=1.5;
常数双变焦_MIN=1.0;
void ImageViewer::resizeEvent(QResizeEvent*事件)
{
如果(缩放最小值<当前缩放)
{
m_graph_view->setTransform(QTransform::fromScale(m_current_zoom,m_current_zoom));
}
其他的
{
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*缩放系数;
m_graph_scene->Setscen直立(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->Setscen直立(m_graph_scene->itemsBoundingRect());
如果(缩放最小值<当前缩放)
{
m_graph_view->setTransform(QTransform::fromScale(m_current_zoom,m_current_zoom));
}
其他的
{
m_graph_view->fitInView(0,0,m_graph_scene->width(),m_graph_scene->height(),Qt::KeepAspectRatio);
}
}

非常简单,只需覆盖resizeEvent

此工作代码依赖于QGraphicsView和QGraphicscene,zoom也可以工作;)

const双缩放系数=1.5;
常数双变焦_MIN=1.0;
void ImageViewer::resizeEvent(QResizeEvent*事件)
{
如果(缩放最小值<当前缩放)
{
m_graph_view->setTransform(QTransform::fromScale(m_current_zoom,m_current_zoom));
}
其他的
{
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*缩放系数;
m_graph_scene->Setscen直立(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->Setscen直立(m_graph_scene->itemsBoundingRect());
如果(缩放最小值<当前缩放)
{
m_graph_view->setTransform(QTransform::fromScale(m_current_zoom,m_current_zoom));
}
其他的
{
m_graph_view->fitInView(0,0,m_graph_scene->width(),m_graph_scene->height(),Qt::KeepAspectRatio);
}
}
调整视图大小时,请收听并调用
fitInView
。调整视图大小时,请收听并调用
fitInView
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);
    }
}