Как нарисовать в сцене QGraphicsView? - PullRequest
0 голосов
/ 02 августа 2011

У меня есть приложение, в котором пользователь может рисовать некоторые точки с помощью мыши, и я использовал 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.

Это один снимок экрана !о том, как это выглядит.

Я пытался сделать так:


    QPoint p = event->pos();
    QRectF sceneRect = this->sceneRect();
    if ((p.x() > sceneRect.left())&&(p.x() &lt sceneRect.right())&&(p.y() > sceneRect.top())&&
            (p.y() &lt sceneRect.bottom())){
            QMessageBox msg;
            msg.setText("point is: " + QString::number(p.x()) + ", " + QString::number(p.y()));
            msg.exec();
        }

, где я проверяю координаты.Но это не возвращает правильные результаты.Как я могу заставить пользователя рисовать только на сцене?

1 Ответ

2 голосов
/ 07 августа 2011

Понял.Координаты созданных точек взяты из QGraphicsView, а не сцены, поэтому при наложении ограничений на точки, которые будут находиться внутри сцены, это не будет работать.


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

...