2

我有一个QGraphicsPixmapItem要移动的东西setFlag(QGraphicsItem::ItemIsMovable),我激活了ItemSendsScenePositionChanges我的项目上的标志,但是itemChange(GraphicsItemChange change, const QVariant &value)当我移动我的项目时没有调用该函数。

有什么建议吗?

这是我的 itemchange() 代码:

#include "graphicspixmapitem.h"

GraphicsPixmapItem::GraphicsPixmapItem(QGraphicsItem *parent, QGraphicsScene *scene)
  : QGraphicsPixmapItem(parent)
{

}

void GraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
  //m_clicked_signal(this);
  //  emit clicked();
}
void GraphicsPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
  //m_clicked_signal(this);
    emit clicked();
}

#include <QDebug>
QVariant GraphicsPixmapItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
    if (change == ItemPositionChange) {
            qDebug() << "Position changed";
        }
    return QGraphicsItem::itemChange(change, value);
}

这是我的 setFlags 代码:

QPixmap Trackinfo(":/images/ScreenContacts.png");
    buf = addPixmap(Trackinfo);
    buf->setPos(0, 40);
    buf->setFlag(QGraphicsItem::ItemIsMovable);
    buf->setFlag(QGraphicsItem::ItemSendsScenePositionChanges);
    buf->setCacheMode(QGraphicsItem::ItemCoordinateCache);
4

1 回答 1

1

您是否尝试在项目的 mousePressEvent 和 mouseReleaseEvent 上调用 QGraphicsItem::mousePressEvent 和 QGraphicsItem::mouseReleaseEvent 的默认实现?

如果您不给他们打电话,我怀疑您甚至无法用鼠标移动该项目,因为您没有让 Qt 知道何时单击/释放该项目。

于 2013-05-20T02:42:07.407 回答