繁体   English   中英

如何使用按钮放大QgraphicsView?

[英]How to zoom in a QgraphicsView using pushbuttons?

我在Qt creator上构建了一个非常简单的图像编辑器。我的图像显示在QGraphicsView上,并且希望使用户能够通过按钮进行放大和缩小。

我进行了很多搜索,发现了如何通过鼠标滚轮进行放大和缩小。由于我对Qt还是很陌生,所以我无法将其调整为按钮,因为我不太清楚所有内容。

我已经尝试过此操作(没有完全了解我在做什么),但结果不是想要的。它只能放大一次并且非常突然。我想要更平滑的缩放,并且可以根据需要进行多次。

void MainWindow::on_pushButton_clicked(){
    QMatrix matrix;
    ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorViewCenter);
    matrix.scale(1.0,1.0);
    ui->graphicsView->setMatrix(matrix);
    ui->graphicsView->scale(1,-1);
}

如果你们能帮助我,我将非常感谢

以下是我如何在QGraphicsView的子类中实现缩放。 请注意,您需要传递不同的“ zoom”值以获得不同的放大倍数,因为缩放系数是绝对值,而不是相对值。

(可以将optMousePos参数设置为指向QPoint,该点指示应该是缩放变换的中心点的点,或者如果您对此不关心,也可以将其保留为NULL。我使用它是因为我放大了根据用户转动鼠标的滚轮进行缩小,这样做时,用户通常希望放大到其鼠标点当前所在的点,而不是放大到图形区域的中心)

 qreal _zoom = 0.0;

 [...]

 void MyQGraphWidgetSubclass :: SetZoomFactor(qreal zoom, const QPoint * optMousePos)
 {
    if ((zoom != _zoom)&&(zoom >= 0.02f)&&(zoom <= 1000000.0f))
    {
       QPointF oldPos;
       if (optMousePos) oldPos = mapToScene(*optMousePos);

       // Remember what point we were centered on before...
       _zoom = zoom;
       QMatrix m;
       m.scale(_zoom, _zoom);
       setMatrix(m);

       if (optMousePos)
       {
          const QPointF newPos = mapFromScene(oldPos);
          const QPointF move   = newPos-*optMousePos;
          horizontalScrollBar()->setValue(move.x() + horizontalScrollBar()->value());
          verticalScrollBar()->setValue(move.y() + verticalScrollBar()->value());
       }
    }
 }

 void MyQGraphWidgetSubclass :: wheelEvent(QWheelEvent* event)
 {
    QPoint pos = event->pos();
    SetZoomFactor(_zoom*pow(1.2, event->delta() / 240.0), &pos);
    event->accept();
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM