我有一个应用程序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
to 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 循环有关)结束什么的)。
正如我所说,对此提供帮助或在鼠标下缩放的一个很好的例子会很棒。