Qt:qgraphicsitem拖放

时间:2012-06-08 14:30:28

标签: qt qgraphicsitem

我有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);
};

1 个答案:

答案 0 :(得分:11)

您是否只想在场景中移动图形项目?如果是这样,那么您需要做的就是为项目设置一些标志。例如,

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

如果您实际上是想在您的图形项目上实施拖放操作,则必须为您的项目调用setAcceptDrops(true)

部分额外工作的原因是,默认情况下,Qt正在尝试优化场景的性能。因此,您必须明确选择加入其中一些额外功能。你说,“我知道这会对性能产生负面影响,但我对此很满意;我需要这个功能。”