2

Qtに問題があります。QGraphicsPixmapItem画像をドラッグしてdragentereventを使用したいのですが、コンソールに表示されませんか?しかし、hoverEnterEventのような他の関数は正しく機能しますか?ここにコードがあります:助けてください?

class button : public QGraphicsPixmapItem
{
public:
    button(const QPixmap &);
    button();
    void changepic( QPixmap,int ,int);
    void mousePressEvent(QGraphicsSceneMouseEvent*event);
    void dragenterEvent(QGraphicsSceneDragDropEvent *event){

        event->setAccepted(1);
       qDebug("drag");
    }
    void dropEvent(QGraphicsSceneDragDropEvent *event){
       qDebug("drop");
    }

    void hoverEnterEvent(QGraphicsSceneHoverEvent *event){

           // do something
       // this->setPos(this->x()+10,this->y()+10);

             qDebug("k");

           QGraphicsItem::hoverMoveEvent(event);
       }
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
4

1 に答える 1

11

シーン内でグラフィック アイテムを移動できるようにしたいだけですか? その場合は、項目にいくつかのフラグを設定するだけです。例えば、

setFlag(QGraphicsItem::ItemIsSelectable);
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemSendsGeometryChanges);

実際にグラフィック アイテムにドラッグ アンド ドロップを実装しようとしている場合はsetAcceptDrops(true)、アイテムを呼び出す必要があります。

この追加作業の理由は、Qt がデフォルトでシーンのパフォーマンスを最適化しようとしているためです。したがって、これらの追加機能の一部を明示的にオプトインする必要があります。あなたは、「これがパフォーマンスに悪影響を与えることはわかっていますが、それでも構いません。この機能が必要です」と言っています。

于 2012-06-08T14:51:56.913 に答える