如何从QGraphicsPixmapItem显示像素位置和颜色

时间:2012-02-06 16:15:49

标签: qt qgraphicsview qpixmap

我正在使用QGraphicsScene / View开发一个自定义小部件,我之前没有使用它。

自定义小部件是一个图像查看器,需要跟踪鼠标移动并将信号发送到它的父对话框/窗口。信号将是鼠标光标下像素的位置及其颜色(RGB)。状态栏将使用该信息。

我使用QGraphicsPixmapItem来显示我从场景中的文件加载的图像。

感谢。

2 个答案:

答案 0 :(得分:5)

首先,您必须在自定义项中实施mouseMoveEvent。在此功能中,您可以轻松获取调用pos功能的鼠标位置。如果将项目的像素图转换为图像并调用pixel函数,则可以获取rgb值。您应该考虑将QImage存储为成员变量,以避免多次转换。最后,您必须发出自定义信号。示例代码如下:

void MyPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
{
    QPointF mousePosition = event->pos(); 
    QRgb rgbValue = pixmap().toImage().pixel(mousePosition.x(), mousePostion.y());

    emit currentPositionRgbChanged(mousePosition, rgbValue);
}

注意 QGraphicsItems未从QObject继承,因此默认信号/广告位不支持。你应该继承QObject 。这就是QGraphicsObject的作用。最后但并非最不重要的是,我建议您在QGraphicsView

上启用mouse tracking

答案 1 :(得分:1)

我发现mouseMoveEvent方法根本不起作用,至少不是Qt5.5。但是,在项目上启用带有setAcceptHoverEvents(true)的悬停事件并重新实现hoverMoveEvent(QGraphicsSceneHoverEvent * event)就像魅力一样。 mouseMoveEvent()上的Qt文档提供了线索:

"如果您收到此活动,您可以确定此项目还收到了鼠标按下事件"

http://doc.qt.io/qt-5.5/qgraphicsitem.html#mouseMoveEvent