2012-02-06 53 views
4

我正在開發與QGraphicsScene /視圖的自定義小部件,我沒有以前的經驗。如何顯示像素位置和顏色從QGraphicsPixmapItem

自定義小部件是一個圖像查看器,需要跟蹤鼠標移動並將信號發送到它的父對話框/窗口。信號將是鼠標光標下像素的位置,並且是顏色(RGB)。狀態欄將使用該信息。

我使用QGraphicsPixmapItem來顯示從場景中的文件加載的圖像。

謝謝。

回答

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所做的。最後但並非最不重要我建議您啓用mouse tracking您的QGraphicsView

1

我發現mouseMoveEvent方法根本不起作用,至少與Qt5.5不兼容。但是,啓用item上的setAcceptHoverEvents(true)懸停事件並重新實現hoverMoveEvent(QGraphicsSceneHoverEvent *事件)就像一個魅力一樣。 上mouseMoveEvent Qt的文檔()提供的線索:

「如果你收到此事件,你可以肯定的是,這個項目還獲得了鼠標新聞發佈會」

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

相關問題