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 回答