绘制带有负值的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()
的x
或y
低于原点,则将原点调整为最上面和最左边的点,并取正宽度值:
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);
}
相关文章:
- 没有找到相关文章