4

QGraphicsScene/View を使用してカスタム ウィジェットを開発していますが、これまでの経験はありません。

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

QGraphicsPixmapItem を使用して、ファイルから読み込んだ画像をシーンに表示します。

ありがとう。

4

2 に答える 2

5

まず、mouseMoveEventカスタム アイテムに を実装する必要があります。この関数では、関数を呼び出してマウスの位置を簡単に取得できますpos。アイテムのピックスマップを画像に変換して関数を呼び出すと、RGB 値を取得できますpixelQImage複数の変換を避けるために、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

于 2012-02-06T16:36:28.667 に答える
1

少なくともQt5.5では、mouseMoveEventアプローチがまったく機能しないことがわかりました。ただし、アイテムで setAcceptHoverEvents(true) を使用してホバー イベントを有効にし、hoverMoveEvent(QGraphicsSceneHoverEvent * event) を再実装することは魅力的でした。mouseMoveEvent() の Qt ドキュメントは手がかりを提供します:

「このイベントを受け取った場合、このアイテムもマウス プレス イベントを受け取ったと確信できます。」

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

于 2015-11-20T12:24:49.327 に答える