Как сделать `fitInView` при изменении размеров окна?

Я создал редактор изображений на Qt, но у меня есть проблема с отображением изображения на graphicsView,

Когда я открываю изображение, я звоню fitInView так что это хорошо вписывается в graphicsView и здесь кроется проблема: когда я максимизирую окно, размер графического представления изменяется, так как я установил горизонтальное расположение, но изображение не меняет размер.

Вот несколько изображений, о которых я говорю:

Нормальный размер
Максимальный размер

Если я открою файл, когда окно уже развернуто, все будет хорошо.

Как я могу позвонить fitInView когда окно развернуто?

1

Решение

Довольно просто, просто переопределите 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);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]