私のクラス構造は次のとおりです。
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);
何か案は?