Я фактически реализую класс, который позволяет пользователю рисовать столько прямоугольников, сколько ему нужно, пока он нажимает мышь.Draw QGraphicsRectItems с отрицательными значениями
Вот код 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
?