2017-05-29 3 views
0

私の仕事環境:Qtの5.8 MSVC2015 64、QT GraphicsView、Windows 7の64ビットGraphicsView Zoomout規模の問題

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; 
    } 

私は上記のコードを修正するために行うことができますどのように任意の提案を?

答えて

0

私の質問には返信がありません。ここから私のソリューションを回避することです ホイールイベントから確認するズームインしたりズームアウトしたりしていますか?私は水平のスクロールバー&を確認します。

ここ_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); 
} 

私はよりよい解決策は、これはそこで知っている、しかし、私はこれだけ:(

を見つけました
関連する問題