2016-02-11 6 views
1

Я создал редактор изображений на Qt, но у меня проблема с изображением на graphicsView.Как `fitInView` при изменении размера окна?

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

Вот некоторые изображения о чем я говорю:

Normal size
Maximum size

Если открыть файл, когда окно уже развернуто, это все хорошо.

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

+0

Слушайте [ 'resizeEvent'] (http://doc.qt.io/qt-5/qgraphicsview. html # resizeEvent) и вызовите 'fitInView', когда ваше представление будет изменено. – thuga

ответ

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); 
    } 
} 
Смежные вопросы