關於QGraphicsView中的物件移動問題. z

pamxy發表於2013-07-24

轉自:http://blog.chinaunix.net/uid-2384984-id-2183162.html

  個人在看qwt 中的svgmap樣例時,放大縮小的位置的原始碼查到在哪裡出現,但關於移動卻找了一陣,不知道它的原始碼在哪裡出現,從跟蹤情況來看,在void QwtMagnifier::widgetMouseMoveEvent( QMouseEvent *mouseEvent )中沒有執行(或效果)。

  後來檢視了QT自帶樣例:imageviewer,感覺與Scroll相關,由於需要顯示,與View相關,暫時就不看GraphicsScence了.
在void QGraphicsView::mouseMoveEvent(QMouseEvent *event)中,經跟蹤發現與下面帶碼有關:
 if (d->dragMode == QGraphicsView::ScrollHandDrag) {
        if (d->handScrolling) {
            QScrollBar *hBar = horizontalScrollBar();
            QScrollBar *vBar = verticalScrollBar();
            QPoint delta = event->pos() - d->lastMouseEvent.pos();
            hBar->setValue(hBar->value() + (isRightToLeft() ? delta.x() : -delta.x()));
            vBar->setValue(vBar->value() - delta.y());

            // Detect how much we've scrolled to disambiguate scrolling from
            // clicking.
            ++d->handScrollMotions;
        }
    }
    d->mouseMoveEventHandler(event);
}
在紅色程式碼處下斷點,用Mouse拖動GraphicsView中的內容時,會在紅色斷下來,然後把游標移到藍色處,跳過與QScrollBar相關的程式碼,看看GraphicsView中的顯示的內容位置變化了嗎?沒有,應該還保留在原來的位置。QScrollBar或其相關類如何控制與它關聯的類的位置,細節還要看Scroll相關的程式碼,這裡只是拋磚引玉提示一下。

相關文章