在Win32下进行缩放时,QGraphicsView会冻结

时间:2015-02-23 17:48:15

标签: windows qt zooming qgraphicsview

我使用 QGraphicsView QGraphicsScene 来显示地图 - 很多对象(线条,图像,多边形等)。我实现了以这种方式缩放视图:

...
void MapView::wheelEvent( QWheelEvent *pEvent )
{
    if ( pEvent->modifiers() & Qt::ControlModifier )
    {
        if ( pEvent->delta() > 0 )
            zoomIn();
        else
            zoomOut();
        pEvent->accept();
    }
    else
    {
        QGraphicsView::wheelEvent( pEvent );
    }
}
...
void MapView::zoomIn( int nValue )
{
    m_dZoom = ( nValue == -1 ) ? qMin( ( m_dZoom + m_dZoomStep ), m_dZoomMax ) : qMin( ( m_dZoom + qreal( nValue ) ), m_dZoomMax );
    setupTransform();
}

void MapView::zoomOut( int nValue )
{
    m_dZoom = ( nValue == -1 ) ? qMax( ( m_dZoom - m_dZoomStep ), m_dZoomMin ) : qMax( ( m_dZoom - qreal( nValue ) ), m_dZoomMin );
    setupTransform();
}
...
void MapView::setupTransform()
{
    QTransform t = transform();
    t.reset();
    qreal dScale = qPow( qreal( 2 ), ( m_dZoom - ( m_dZoomMax / 4 ) ) / qreal( 50 ) );
    t.scale( dScale, dScale );
    setTransform( t );
    emit onZoomChanged( m_dZoom );
}
...

当我在Linux上运行应用程序(CentOS 6.3,Qt 4.8)时 - 缩放视图运行非常好(顺利)。但是当我在Windows上运行它(Windows 7 32位,Qt 5.4)时,缩小视图会冻结 - 我一直旋转鼠标滚轮没有效果(没有缩放,视图没有响应),一两秒后视图开始再次回应。当发生这种情况时,当前变焦位置被证明是正确设置的 - 看起来视图正在缩放但不更新图片。使用不同的缩放值和滚动位置会出现问题,但总是在视图要裁剪地图对象(路径)时。 你有任何想法如何解决这个问题,或者我做错了什么? 非常感谢你提前。

0 个答案:

没有答案