CAD アプリケーションで使用するカスタム キャンバスの QGraphicsView をサブクラス化しました。QGraphicsView::wheelEvent を正常に再実装して、コントロール キーのキーボード修飾子をチェックし、コントロール キーが押された場合はズームします。ユーザーがシフトを押しながらホイールを使用すると、水平スクロールを実装しようとしています。
私が抱えている問題は、水平スクロールも常に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