如何在QGraphicsView的场景中绘制?

时间:2011-08-01 20:16:11

标签: qt4 qgraphicsview

我有一个应用程序,用户可以使用鼠标绘制一些点,我使用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();
        }

我正在测试坐标。但它没有返回正确的结果。 如何限制用户仅在场景上绘制?

1 个答案:

答案 0 :(得分:2)

知道了。创建的点的坐标来自QGraphicsView而不是场景,因此当将点上的约束放在场景中时,它将无法工作。

必须将点映射到场景:


    QPointF p = mapToScene(event->pos());