我有一个在屏幕中间有一个QGraphicsView
窗口的应用程序。我希望能够使用鼠标滚轮滚动放大和缩小。
目前我已经重新实现QGraphicsView
并覆盖了鼠标滚动功能,使其不会滚动图像(就像默认情况下一样)。
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(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);
}
}
正如您在上面看到的,我正在使用 aQMatrix
并对其进行缩放并将其设置为 Graphicsview 并将转换锚设置为鼠标下,但有时如果我滚动加载它只会开始放大(我认为这与 int 循环有关)。
正如我所说,这方面的帮助或鼠标下缩放的一个很好的例子会很棒。