2012-02-06 28 views
4

QGraphicsScene/Viewでカスタムウィジェットを開発しています。以前の経験はありません。QGraphicsPixmapItemからピクセル位置と色を表示する方法

カスタムウィジェットは、マウスの動きを追跡し、親ダイアログ/ウィンドウに信号を送信する必要がある画像ビューアです。信号は、マウスカーソルの下のピクセルの位置とその色(RGB)です。ステータスバーはその情報を使用します。

QGraphicsPixmapItemを使用して、シーン内のファイルからロードする画像を表示します。

ありがとうございました。

答えて

5

まず、カスタムアイテムにmouseMoveEventを実装する必要があります。この機能では、pos関数を呼び出すマウスの位置を簡単に取得できます。アイテムのピックスマップをイメージに変換してpixel関数を呼び出すと、rgb値を取得できます。複数の変換を避けるには、メンバー変数としてQImageを格納することを検討する必要があります。最後にカスタム信号を出力する必要があります。サンプルコードは次のとおりですので、信号は/スロットがをサポートしていませんデフォルトでQObjectから継承しないQGraphicsItemsこと

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

    emit currentPositionRgbChanged(mousePosition, rgbValue); 
} 

注意してください。 QObjectから継承する必要があります。これはQGraphicsObjectの機能です。最後に重要なのは、mouse trackingQGraphicsView

1

私は、少なくともQt5.5で動作しないことがわかりました。ただし、アイテムに対してsetAcceptHoverEvents(true)でホバーイベントを有効にし、hoverMoveEvent(QGraphicsSceneHoverEvent *イベント)を再実装することは魅力的でした。 mouseMoveEvent上 Qtのドキュメント()手掛かりを提供します。

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

を「あなたは、このイベントを受信した場合は、この項目にはまた、マウスプレスイベントを受け取ったことを確信することができます」
関連する問題