gpt4 book ai didi

c++ - 当 MouseWheenTurned 首先滚动然后缩放时缩放 QGraphicsView

转载 作者:行者123 更新时间:2023-11-30 05:38:34 24 4
gpt4 key购买 nike

我正在尝试为我在 Qt 中绘制的图形添加放大/缩小功能。我首先做的是用我自己的类 GraphicsScene 扩展 QGraphicsScene 并重载 wheel 事件。

class GraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
GraphicsScene(QObject *parent, bool drawAxes){ /*drawing stuff here.. */}
virtual void wheelEvent(QGraphicsSceneWheelEvent *mouseEvent);
signals:
void mouseWheelTurned(int);
};


void GraphicsScene::wheelEvent(QGraphicsSceneWheelEvent* mouseEvent) {
int numDegrees = mouseEvent->delta() / 8;
int numSteps = numDegrees / 15; // see QWheelEvent documentation

emit mouseWheelTurned(numSteps);
}

当轮子转动时,一个事件被发送到包含场景的 View ,并执行缩放:

class GraphicsView : public QGraphicsView{
Q_OBJECT
qreal m_currentScale;

public:

GraphicsView(QWidget * parent): QGraphicsView(parent){ m_currentScale = 1.0; }
public slots:
void onMouseWheelTurned (int);
};
void GraphicsView::onMouseWheelTurned(int steps) {
qreal sign = steps>0?1:-1;
qreal current = sign* pow(0.05, abs(steps));

if(m_currentScale+current > 0){
m_currentScale += current;
QMatrix matrix;
matrix.scale(m_currentScale, m_currentScale);
this->setMatrix(matrix);

}
}

这行得通,但我注意到如果我放大很多,例如放大到图形的顶部,这样图形就不再完全位于视口(viewport)中,然后我缩小,程序首先滚动到底部的图形。我可以看到垂直滚动条向下滑动。只有当它到达底部时,它才会开始缩小。可能是什么问题呢?

我想在没有这种向上/向下滚动行为的情况下放大/缩小。

最佳答案

您最好在场景中处理它并将事件发送到 View 。

直接在 View 中使用 QGraphicsView::wheelEvent‌ 简单地处理事件,然后调用它的 scale功能。

关于c++ - 当 MouseWheenTurned 首先滚动然后缩放时缩放 QGraphicsView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32688778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com