【发布时间】:2013-10-07 10:57:01
【问题描述】:
我有一个应用程序,屏幕中间有一个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);
}
}
正如您在上面看到的,我正在使用QMatrix 并对其进行缩放并将其设置为 Graphicsview 并将转换锚设置为鼠标下,但有时如果我滚动加载它只会无法正常工作开始只放大(我认为这与 int 循环或其他事情有关)。
正如我所说,这方面的帮助或鼠标下缩放的一个很好的例子会很棒。
【问题讨论】:
-
很高兴能得到这个问题的明确答案,因为有太多像这样的问题都有不同的答案,而且大多数问题似乎只解决了一半,然后才被单独留下......当然这个并不太复杂,它只是正确缩放的问题以及如何应用它..
标签: c++ qt qgraphicsview