个人在看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相关的代码,这里只是抛砖引玉提示一下。
阅读(4265) | 评论(0) | 转发(0) |