我正在开发与QGraphicsScene /视图的自定义小部件,我没有以前的经验。如何显示像素位置和颜色从QGraphicsPixmapItem
自定义小部件是一个图像查看器,需要跟踪鼠标移动并将信号发送到它的父对话框/窗口。信号将是鼠标光标下像素的位置,并且是颜色(RGB)。状态栏将使用该信息。
我使用QGraphicsPixmapItem来显示从场景中的文件加载的图像。
谢谢。
我正在开发与QGraphicsScene /视图的自定义小部件,我没有以前的经验。如何显示像素位置和颜色从QGraphicsPixmapItem
自定义小部件是一个图像查看器,需要跟踪鼠标移动并将信号发送到它的父对话框/窗口。信号将是鼠标光标下像素的位置,并且是颜色(RGB)。状态栏将使用该信息。
我使用QGraphicsPixmapItem来显示从场景中的文件加载的图像。
谢谢。
首先,您必须在您的自定义项目中实现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
所做的。最后但并非最不重要我建议您启用mouse tracking您的QGraphicsView
我发现mouseMoveEvent方法根本不起作用,至少与Qt5.5不兼容。但是,启用item上的setAcceptHoverEvents(true)悬停事件并重新实现hoverMoveEvent(QGraphicsSceneHoverEvent *事件)就像一个魅力一样。 上mouseMoveEvent Qt的文档()提供的线索:
“如果你收到此事件,你可以肯定的是,这个项目还获得了鼠标新闻发布会”