gpt4 book ai didi

c++ - 用负值绘制 QGraphicsRectItem

转载 作者:行者123 更新时间:2023-11-30 05:37:11 32 4
gpt4 key购买 nike

我实际上正在实现一个类,该类允许用户在按下鼠标时绘制任意数量的矩形。

这是处理这种情况的 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);
}

关于c++ - 用负值绘制 QGraphicsRectItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342176/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com