1

私のクラス構造は次のとおりです。

FloatingButtonItemというクラスは、 QGraphicsPixmapItemを継承しています。

class FloatingButtonItem : public QGraphicsPixmapItem
{

(...) そして、これらの 5 つの関数を再実装します。

protected:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);

それぞれが BOOLEAN 変数の値を変更し、メッセージを出力するだけです。

そして、コンストラクターには次のものがあります。

FloatingButtonItem::FloatingButtonItem(MyGraphicsScene* scene,  QGraphicsItem* parent) :  QGraphicsPixmapItem(parent)

FloatingButton は完全に描画されますが、ホバー イベントは受信されません

そして、あなたがそれを尋ねる前に:はい、私は作成に次の行を追加しました:

  **setAcceptHoverEvents(true);**
  setFlag(ItemIsMovable, true);
  setFlag(ItemSendsGeometryChanges, true);
  setZValue(20.0);

そして、アイテムは残りのアイテムよりも完全に前に表示されます.

作成後、「addItem」関数を使用してシーンに追加します。

作成に問題はありませんか?子育てとは?

一方、QGraphicsPolygonItemから継承する別のクラスと、次のように作成されるクラスである GenericItem と呼ばれるものがあります。

class GenericItem : public QObject {

Q_OBJECT

...

また、ホバーイベントでも機能します。どうやらそれは同じです... Q_OBject を追加して QObject から継承させることは機能しません。

編集:別のコメントを追加します:外接する四角形を確認しました。大丈夫です。サイズが 0 ではありません。

EDIT 2: バウンディングボックスについて:

私もboundingRect関数を再実装しました:

QRectF boundingRect () const { return boundingRect_; }   

そして、境界矩形は、次のように選択された Pixmap を取得する作成で計算されます。

boundingRect_ = QRectF( -pix.width()/2, -pix.height()/2, pix.width() , pix.height());
setPos(-pix_.width()/2,-pix_.height()/2);

何か案は?

4

1 に答える 1