簡體   English   中英

GraphicsView縮放比例問題

[英]GraphicsView Zoomout scale Issue

我的工作環境:Qt 5.8 MSVC2015 64位,QT GraphicsView,Windows 7 64位

當GraphicsView垂直滾動條消失時,縮小應停止。

所以我嘗試了下面的代碼,但無法正常工作:

void GraphicsView::scale(qreal scaleFactor)
{
    QRectF r(0, 0, 1, 1); // A reference
    int pos_x = this->horizontalScrollBar()->value();
    int pos_y = this->verticalScrollBar()->value();

    qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(r).width(); // absolute zoom factor


    if ( factor > 7) { // Check zoom out limit
        return;
    }

   //Failed, this code failed If zoom out again.** 
   if(pos_x <= 0 && pos_y <= 0 ) 
    {
        return;
    }

有什么建議可以解決上面的代碼嗎?

沒有回答我的問題。 這是我的解決方案,請從wheelEvent檢查我們是否正在放大或縮小。 我縮放檢查垂直和水平滾動條。

這里_steps是我的類GraphicsView的私有數據成員。 從QGraphicsView派生的GraphicsView。

void GraphicsView::wheelEvent(QWheelEvent * event)
{
    // Typical Calculations (Ref Qt Doc)
    const int degrees = event->delta() / 8;
    _steps = degrees / 15;  // _steps = 1 for Zoom in, _steps = -1 for Zoom out.

}



void GraphicsView::scale(qreal scaleFactor)
{
    QRectF r(0, 0, 1, 1); // A reference
    int pos_x = this->horizontalScrollBar()->value();
    int pos_y = this->verticalScrollBar()->value();
    qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(r).width(); // absolute zoom factor
    if ( factor > 7) { // Calculate your zoom in limit from factor
        return;
    }

 //When there is no scroll bar, am I still I am zooming, stop it using _steps  
    if(pos_x <= 0 && pos_y <= 0 && _steps == -1)
    {
        return;
    }
    QGraphicsView::scale(scaleFactor, scaleFactor);
}

我知道有一個更好的解決方案,但這,但我只發現了:(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM