我有一个应用程序,用户可以使用鼠标绘制一些点,我使用QGraphicsView来做到这一点。
我在QGraphicsView中初始化了一个场景:
scene = new QGraphicsScene(this); scene->setItemIndexMethod(QGraphicsScene::NoIndex); scene->setSceneRect(0, 0, 850, 480); setScene(scene); setCacheMode(CacheBackground); setViewportUpdateMode(BoundingRectViewportUpdate); setRenderHint(QPainter::Antialiasing); setTransformationAnchor(AnchorUnderMouse); scale(qreal(1.0), qreal(1.0)); setMinimumSize(400, 400);
此场景未涵盖整个QGraphicsView,我希望用户只能在场景上绘制点。点的坐标也应该是场景而不是QGraphicsView区域的坐标。
这是一个screenshot!看起来如何。
我试过这样做:
QPoint p = event->pos(); QRectF sceneRect = this->sceneRect(); if ((p.x() > sceneRect.left())&&(p.x() < sceneRect.right())&&(p.y() > sceneRect.top())&& (p.y() < sceneRect.bottom())){ QMessageBox msg; msg.setText("point is: " + QString::number(p.x()) + ", " + QString::number(p.y())); msg.exec(); }
我正在测试坐标。但它没有返回正确的结果。 如何限制用户仅在场景上绘制?
答案 0 :(得分:2)
知道了。创建的点的坐标来自QGraphicsView而不是场景,因此当将点上的约束放在场景中时,它将无法工作。
必须将点映射到场景:
QPointF p = mapToScene(event->pos());