我在Qt上创建了一个图像编辑器,但我在graphicsView
上显示图像时遇到了问题。
当我打开图像时,我会调用fitInView
以使其与graphicsView
完全吻合,这就存在问题:当我最大化窗口时,图形视图大小会发生变化,因为我设置了一个水平布局,但图像不会改变大小。
这里有一些关于我正在谈论的内容的图片:
如果我在窗口已经最大化时打开文件,那一切都很好。
如何在窗口最大化时调用fitInView
?
答案 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);
}
}