如何使用QPinchGesture缩放QGraphicsView的内容?

时间:2016-01-15 08:46:10

标签: qt touch qgraphicsview qgraphicsscene

我正在嵌入式平台上实现图像查看器。硬件是一种平板电脑,并具有触摸屏作为输入设备。我正在使用的Qt版本是5.4.3。

QGraphicsView用于显示包含QGraphicsPixmapItem的QGraphicsScene。 QGraphicsPixmapItem包含要显示的像素图。

代码的相关部分如下:

void MyGraphicsView::pinchTriggered(QPinchGesture *gesture)
{
QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags();

if (changeFlags & QPinchGesture::ScaleFactorChanged) {
    currentStepScaleFactor = gesture->totalScaleFactor();
}

if (gesture->state() == Qt::GestureFinished) {
    scaleFactor *= currentStepScaleFactor;
    currentStepScaleFactor = 1;
    return;
}

// Compute the scale factor based on the current pinch level
qreal sxy = scaleFactor * currentStepScaleFactor;

// Get the pointer to the currently displayed picture
QList<QGraphicsItem *> listOfItems = items();
QGraphicsItem* item = listOfItems.at(0);

// Scale the picture
item.setScale(sxy);

// Adapt the scene to the scaled picture
setSceneRect(scene()->itemsBoundingRect());
}

由于捏合,像素图从视图的左上角开始缩放。

如何将像素图缩放到QPinchGesture的中心?

1 个答案:

答案 0 :(得分:0)

From The Docs

  

项目围绕其变换原点进行缩放,默认情况下为(0,0)。您可以通过调用setTransformOriginPoint()来选择不同的转换原点。

该功能接收QPoint,因此您需要首先找到您的中心点然后设置原点。

void QGraphicsItem::setTransformOriginPoint(const QPointF & origin)