不敛时QGraphicsPixmapItem mouseMoveEvent(QGraphicsPix

2019-09-21 12:43发布

我正在使用Qt 4.8作为GUI框架C ++应用程序:一个子类的QGraphicsView渲染含有一个子类的一个或QGraphicsScene更多子类QGraphicsPixMapItem(一个或多个),其中我需要知道鼠标光标的相对像素位置。

下面如何显示从QGraphicsPixmapItem像素位置和颜色我继承QGraphicsPixmapItem :

class MyGraphicsPixmapItem : public QObject, public QGraphicsPixmapItem
{
    Q_OBJECT
public:
    explicit MyGraphicsPixmapItem(QGraphicsItem *parent = 0);
signals:
public slots:
    void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
};

和落实构造和处理程序:

MyGraphicsPixmapItem::MyGraphicsPixmapItem(QGraphicsItem *parent) : QGraphicsPixmapItem(parent)
{
    qDebug() << "constructor mygraphicspixmapitem";
    setCacheMode(NoCache);
    setAcceptHoverEvents(true);
    setFlag(QGraphicsItem::ItemIsSelectable,true);
}

void MyGraphicsPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
{
    QPointF mousePosition = event->pos(); 
    qDebug() << "mouseMoveEvent";
    qDebug() << mousePosition;
    QGraphicsPixmapItem::mouseMoveEvent(event);
}

我也子类的QGraphicsView和QGraphicsScene与传递事件进一步下跌顺利各自mouseMoveEvent处理程序:

void MyGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug() << "QGraphicsScene: mouseMoveEvent";
    QGraphicsScene::mouseMoveEvent(event);
}

然而,尽管MyGraphicsView配置了...

setMouseTracking(true);
setInteractive(true);

... MyGraphicsPixmapItem只执行被点击时mouseMoveEvent处理程序或将其设置为采集后:

void MyGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug() << QString("item clicked at: %1, %2").arg( event->pos().x()).arg( event->pos().y()  );
    event->accept();
    grabMouse();
}

我想知道我是否犯了一个错误,或在上述答案给出的解决方案是有缺陷的或不完整。 此外,我想知道是否没有QGraphicsPixmapItem被设定为“抓取”的mouseMoveEvent处理程序可以被触发。 另外,也可以,如果配置为抓取当鼠标首先移动到项目自动发生。

这里是一个线程 ,其中一个非常类似的问题似乎与商品相关的参考,但因为我添加的项目,以这样的情景:

thepixMapItem = new MyGraphicsPixmapItem();
scene->addItem(thepixMapItem);

我想这是不相关的。

Answer 1:

解决的办法是重新实现或过滤项的hoverMoveEvent ,作为mouseMoveEvent接收鼠标按当仅触发:

如果您收到此事件,你可以肯定的是, 这个项目还获得了鼠标按下事件 ,这项目是当前鼠标抓取。



文章来源: QGraphicsPixmapItem mouseMoveEvent when not grabbing