我正在使用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);
我想这是不相关的。