我正在開發與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的文檔()提供的線索:
「如果你收到此事件,你可以肯定的是,這個項目還獲得了鼠標新聞發佈會」