首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在QGraphicsView中拖动鼠标时,如何量化多个QGraphicsItems的位置?

在QGraphicsView中拖动鼠标时,如何量化多个QGraphicsItems的位置?
EN

Stack Overflow用户
提问于 2011-08-11 00:52:40
回答 2查看 357关注 0票数 0

您好,感谢您的阅读。在QGraphicsView中拖动鼠标时,我无法正确量化多个QGraphicsItems的位置。如果一次只拖动一个,我设置的系统可以正确量化QGraphicsItem,但是,如果我选择了多个并拖动它们,则只量化主要项(鼠标正下方的项),其余项的位置将连续设置。我非常感谢任何人对此的帮助。相关代码如下:

它位于从QGraphicsRectItem继承而来的名为MutaEvent的类中。我重新定义了mouseMoveEvent()和setPos()函数:

代码语言:javascript
运行
复制
void MutaEvent::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
{
    QGraphicsRectItem::mouseMoveEvent(event);
    setPos(pos());
}

void MutaEvent::setPos(const QPointF &pos)
{
    QGraphicsRectItem::setPos(Muta::quantizePointD(pos,30,15));
    emit posChanged(objectID,pos);
}

下一部分是一个名为Muta的名称空间中的静态函数:

代码语言:javascript
运行
复制
static QPointF quantizePoint(QPointF point,double xQuant, double yQuant)
{
    double x = quantize(point.x(),xQuant);
    double y = quantize(point.y(),yQuant);
    QPointF quantPoint(x,y);
    return quantPoint;
}

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 20:43:33

看看如何覆盖QGraphicsItem::itemChange protected函数。在那里,您可以在项目位置即将更改(QGraphicsItem::ItemPositionChange)时收到通知,并有机会修改该值。无论更改是如何启动的(鼠标移动、组的一部分、在代码中设置等),都会调用此方法。

我怀疑您的部分问题是QGraphicsItem::setPos()不是虚拟的,这意味着如果调用者将您的MutaEvent*的实例视为QGraphicsItem*,则不会调用您的setPos()函数。这在Qt框架中的任何地方都是如此,因为,当然,他们并不了解您的MutaEvent类。这就是他们提供虚拟itemChange方法的原因。

票数 0
EN

Stack Overflow用户

发布于 2011-08-11 05:16:56

所有选定的项都是您的MutaEvent类吗?在每个选定的项上都会调用setPos(),因此如果没有调用,它将只使用默认实现。

如果你想让它正常工作,你可能需要实现你自己的鼠标事件处理(顺便说一句,在MutaEvent::mouseMoveEvent中调用setPos(pos())不会有任何效果)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7014679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档