绘制带有负值的qgraphicsrectems

Draw QGraphicsRectItems with negative values

本文关键字:qgraphicsrectems 绘制      更新时间:2023-10-16

我实际上实现了一个类,它允许用户在按鼠标时画出尽可能多的矩形。

下面是处理这种情况的QGraphicsScene的代码:

void ImageGraphicsSceneW::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
  origPoint=event->scenePos();
  qDebug()<<"origPoint="<<origPoint;
  mousePressed=true;
  QGraphicsScene::mousePressEvent(event);
}
void ImageGraphicsSceneW::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
  if(mousePressed==true){
    if(!rectangle){
      rectangle=new QGraphicsRectItem;
      this->addItem(rectangle);
      rectangle->setPen(QPen(Qt::red,4,Qt::SolidLine));
      rectangle->setPos(origPoint);
    }
    qDebug()<<"event.scenePos.x:"<<event->scenePos();
    rectangle->setRect(0,0,(event->scenePos().x()-origPoint.x()),
      (event->scenePos().y()-origPoint.y()));
  }
  else
    QGraphicsScene::mouseMoveEvent(event);
}
void ImageGraphicsSceneW::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
  rectangle=NULL;
  //buffer_rectangle(0,0,0,0);
  mousePressed=false;
  QGraphicsScene::mouseReleaseEvent(event);
}

然而,当我实际想要绘制具有负宽度和负高度的矩形时,我有一些问题。我指的是origPoint.x()origPoint.y()的值分别严格高于scenePos().x()scenePos().y()

你知道我该如何处理这个问题吗?我必须使用QTransform类吗?

如果event->scenePos()xy低于原点,则将原点调整为最上面和最左边的点,并取正宽度值:

void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
  if(mousePressed==true){
    if(!rectangle){
      rectangle=new QGraphicsRectItem;
      this->addItem(rectangle);
      rectangle->setPen(QPen(Qt::red,4,Qt::SolidLine));
      rectangle->setPos(origPoint);
    }
    float top = qMin(origPoint.y(), event->scenePos().y());
    float left = qMin(origPoint.x(), event->scenePos().x());
    rectangle->setPos(left, top);
    rectangle->setRect(0, 0, qAbs(event->scenePos().x() - origPoint.x()),
      qAbs(event->scenePos().y() - origPoint.y()));
    qDebug() << top << left << origPoint << event->scenePos();
  }
  else
    QGraphicsScene::mouseMoveEvent(event);
}
相关文章:
  • 没有找到相关文章