在 Qt 中,QGraphicsView
是一个强大的部件,它提供了一个可滚动的视图,用于显示 QGraphicsScene
中的内容。QGraphicsView
支持用户与场景中的图形项进行交互,包括平移、缩放和旋转。这些交互功能是通过鼠标和键盘事件来实现的。
对于缩放,QGraphicsView
提供了 scale()
方法,允许你设置缩放因子。例如,你可以通过鼠标滚轮事件来实现缩放功能:
void MyView::wheelEvent(QWheelEvent *event)
{
int wheelValue = event->angleDelta().y();
double ratio = (double)wheelValue / (double)1200 + 1;
scale(ratio, ratio);
}
对于移动,QGraphicsView
提供了 centerOn()
方法,允许你设置视图的中心点。你可以通过改变视图中心点的位置来实现场景的移动。例如,你可以通过鼠标拖拽事件来实现移动功能:
void MyView::mousePressEvent(QMouseEvent *event)
{
QPointF center = mapToScene(event->pos());
QPointF scenePos = mapToScene(event->pos());
dragPos = event->pos();
}
void MyView::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
QPointF delta = event->pos() - dragPos;
centerOn(center - delta);
}
}
在上述代码中,centerOn()
方法用于将视图的中心点移动到场景中的指定位置,而 mapToScene()
方法用于将视图坐标转换为场景坐标。
除了 QGraphicsView
,Qt 还提供了其他绘图控件,如 QWidget
、QFrame
等,它们也可以进行缩放和移动,但这通常需要你自己处理更多的细节,比如手动重绘控件内容和处理用户输入事件。QGraphicsView
由于其内置的交互功能和优化,通常是实现复杂交互式绘图应用的首选。