CADアプリケーションで使用するカスタムキャンバスをQGraphicsViewにサブクラス化しました。 QGraphicsView :: wheelEventを再実装して、コントロールキーのキーボード修飾子を確認し、コントロールキーが押されている場合はズームするようにしました。私は、ユーザーがシフトを保持し、ホイールを使用するときに水平スクロールを実装しようとしています。qgraphicsview水平スクロールには常に垂直方向のデルタが付きます
私が問題になっているのは、水平スクロールもです。常にが0.279だけスクロールしています。巨大な問題ではありませんが、非常に迷惑で、何か間違っていることを指摘します。
だから、ここの質問は以下のとおりです。
- これは、水平スクロールを実装するための正しい方法ですか?そうでない場合は、何ですか?
- このデルタ0.279を削除するにはどうすればよいですか?
ありがとうございます。コードとscrollHorizontalでqDebug()ラインから
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);
}
サンプル出力以下のサンプル出力シーンの左エッジで:
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
これは奇妙です。シーン矩形の境界に達したときに少し不自然にスクロールする 'QGraphicsView'が見つかりました。可視のrectがシーンrectにどこにあるかに関係なく同じ動作ですか? – cmannett85
問題を引き起こしていることを知ることは興味深いですが、あなたがしていることは[UX](http://ux.stackexchange.com)の観点からはかなり悪いことです。誰かが水平スクロールを望むならば、それを実装した入力デバイスを単に使うことができます。最近のすべてのトラックパッド、スクロールパドルやマルチタッチなどのマウスのようなものです。おそらく、CADユーザーはまともな入力デバイスを用意する余裕があり、そのような回避策を用意する必要はありません。 –