QGraphicsScene/View を使用してカスタム ウィジェットを開発していますが、これまでの経験はありません。
カスタム ウィジェットは、マウスの動きを追跡し、シグナルをその親ダイアログ/ウィンドウに送信する必要がある画像ビューアです。信号は、マウス カーソルの下のピクセルの位置とその色 (RGB) になります。ステータス バーはその情報を使用します。
QGraphicsPixmapItem を使用して、ファイルから読み込んだ画像をシーンに表示します。
ありがとう。
QGraphicsScene/View を使用してカスタム ウィジェットを開発していますが、これまでの経験はありません。
カスタム ウィジェットは、マウスの動きを追跡し、シグナルをその親ダイアログ/ウィンドウに送信する必要がある画像ビューアです。信号は、マウス カーソルの下のピクセルの位置とその色 (RGB) になります。ステータス バーはその情報を使用します。
QGraphicsPixmapItem を使用して、ファイルから読み込んだ画像をシーンに表示します。
ありがとう。
まず、mouseMoveEvent
カスタム アイテムに を実装する必要があります。この関数では、関数を呼び出してマウスの位置を簡単に取得できますpos
。アイテムのピックスマップを画像に変換して関数を呼び出すと、RGB 値を取得できますpixel
。QImage
複数の変換を避けるために、as メンバー変数を格納することを検討する必要があります。最後に、カスタム シグナルを発行する必要があります。サンプルコードは次のとおりです。
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
少なくともQt5.5では、mouseMoveEventアプローチがまったく機能しないことがわかりました。ただし、アイテムで setAcceptHoverEvents(true) を使用してホバー イベントを有効にし、hoverMoveEvent(QGraphicsSceneHoverEvent * event) を再実装することは魅力的でした。mouseMoveEvent() の Qt ドキュメントは手がかりを提供します:
「このイベントを受け取った場合、このアイテムもマウス プレス イベントを受け取ったと確信できます。」