QGraphicsView
画面の中央にウィンドウがあるアプリケーションがあります。マウスホイールのスクロールを使用してズームインおよびズームアウトできるようにしたい。
現在、マウスのスクロール機能を再実装QGraphicsView
してオーバーライドし、画像をスクロールしないようにしました(デフォルトのように)。
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(false);
}
}
したがって、スクロールすると、マウスホイールが前方にある場合は true 、マウスホイールが後方にある場合は false という信号を発しています。
次に、この信号を、GUI を処理するクラスのスロット (以下のズーム機能を参照) に接続しました。基本的に、ズーム機能はそれを行うための最良の方法ではないと思います。スケールを設定するためにオーバーライドされた wheelevent 関数を使用している人々の例を見てきましたが、完全な答えを見つけることができませんでした。
代わりにこれを行いましたが、決して完璧ではないので、これを少し調整するか、ホイールイベント関数でスケールを使用した実際の例を探しています。
コンストラクタで初期化m_zoom_level
し0
ます。
void Display::zoomfunction(bool zoom)
{
QMatrix matrix;
if(zoom && m_zoom_level < 500)
{
m_zoom_level = m_zoom_level + 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
else if(!zoom)
{
m_zoom_level = m_zoom_level - 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
}
上記でわかるように、私はそれを使用しQMatrix
てスケーリングし、それを Graphicsview に設定し、変換アンカーをマウスの下に設定していますが、ロードをスクロールしている場合、完全に機能しないことがあります。これは、 int ループオーバーまたは何かに関係していると思います)。
私が言ったように、これについての助けや、マウスの下のスケールの良い例は素晴らしいでしょう.