首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调整窗口大小时` How InView`?

如何在调整窗口大小时` How InView`?
EN

Stack Overflow用户
提问于 2016-02-11 09:46:02
回答 1查看 337关注 0票数 1

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

当我打开图像时,我调用fitInView以便它很好地适应graphicsView,这就是问题所在:当我最大化窗口时,由于我设置了水平布局,图形视图的大小发生了变化,但图像的大小没有变化。

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

如果我在窗口已经最大化的情况下打开文件,那么一切都是正常的。

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

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 02:50:33

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

此工作代码依赖于QGraphicsView和QGraphicsScene,缩放也适用;)

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35329386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档