我有一个应用程序,在屏幕中央有一个QGraphicsView
窗口。我想通过鼠标滚轮缩放视图。
目前,我已经重新实现了QGraphicsView
并重写了鼠标滚动函数,以便它不会像默认情况下一样滚动图片。
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(false);
}
}
当我滚动时,通过一个信号来发出真假值,如果鼠标滚轮向前则为 true ,向后则为 false 。
然后,我将这个信号连接到处理 GUI 的类中的一个槽(缩放函数 见下文)中。现在,基本上我认为我的缩放函数根本不是最好的方法,我看到有些人使用重写的 wheelevent 函数来设置比例尺,但我并没有找到完整的答案。
因此,我没有采用那种方法,而是做了另外一种方法,但它并不完美,所以我正在寻求对其进行微调或者使用 wheel event 函数的比例尺工作示例。
我在构造函数中将 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循环或其他事情有关)。
正如我所说,对此的帮助或一个好的缩放鼠标下的示例将是很棒的。