我将 QGraphicsView 子类化为要在 CAD 应用程序中使用的自定义画布。我已经成功地重新实现了 QGraphicsView::wheelEvent 来检查控制键的键盘修饰符,如果按下控制键,则进行缩放。当用户按住 shift 并使用滚轮时,我正在尝试实现水平滚动。
我遇到的问题是水平滚动也总是向上滚动 0.279。不是一个大问题,但非常烦人,它指出了其他问题。
所以,这里有几个问题:
- 这是实现水平滚动的正确方法吗?如果不是,那是什么?
- 如何消除这个 0.279 的增量?
提前致谢。下面的代码和示例输出
void myView::zoom(int delta)
{
double factor = pow(1.2, delta/abs(delta));
this->scale(factor, factor);
}
void myView::scrollHorizontal(int level)
{
QPointF center = mapToScene(viewport()->rect().center());
qDebug() << "center: " << center.x() << ", " << center.y();
centerOn(QPointF(center.x() - level, center.y()));
}
void myView::wheelEvent(QWheelEvent *event)
{
//qDebug() << "delta: " << event->delta();
if (event->modifiers() & Qt::ControlModifier)
{
this->zoom(event->delta());
}
else if (event->modifiers() & Qt::ShiftModifier)
{
this->scrollHorizontal(event->delta());
}
else
QGraphicsView::wheelEvent(event);
}
位于场景左边缘时,scrollHorizontal 中 qDebug() 行的示例输出:
center: 261.5 , 615.654
center: 261.5 , 615.375
center: 261.5 , 615.096
center: 261.5 , 614.817
center: 261.5 , 614.538
center: 261.5 , 614.259
center: 261.5 , 613.98
center: 261.5 , 613.701
center: 261.5 , 613.421