无法在鼠标光标下完全在QGraphicsScene上绘制新项目



我有这样的代码可以在鼠标光标下绘制新顶点。

void DiaScene::mouseReleaseEvent(QGraphicsSceneMouseEvent * me)
{
qDebug() << Q_FUNC_INFO << me->scenePos();
if (this->cursorState == VERTEX)
{
    Vertex * v = new Vertex(1,1);
    vertexes.append(v);
    this->addItem(v);
    qDebug() << me->pos();
    v->setPos(me->scenePos());
    qDebug() << me->scenePos();
}
}

运行时,我在同一位置多次单击,但是QDEBUG显示不同的QPointF,并绘制了不在光标下的新项目。我了解为什么我 -> scenepos()会更改。但是为什么场景不在光标下绘制新顶点?

首先,它绘制了远离光标的新项目。下一次点击同一位置,新绘制的项目的位置变得更靠近光标。

"下一次点击每次点击同一位置,新绘制的位置 项目变得更接近光标'

此行为意味着您的场景没有固定的大小,并且其SceneRect随着每个新的添加项目而增长。如果您在mouseReleaseEvent处理程序的末尾添加了qDebug()<<sceneRect();,您将看到这一点。为了修复它,只需将场景rect设置为父级的图形视图rect:

QRect r = QRect(0,0, ui->graphicsView->width(), ui->graphicsView->height());
MyScene* sc = new MyScene();
ui->graphicsView->setScene(sc);
sc->setSceneRect(r);

相关内容

  • 没有找到相关文章

最新更新