Qt:qgraphicsitem 拖放

3

我在使用Qt时遇到了问题。我想拖动一张图片并使用QGraphicsPixmapItemdragEnterEvent,但它没有出现在控制台中? 但其他函数,如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);
};

我觉得你对“拖放”(将一个对象从一个地方拖动并“放置”到另一个地方)的概念和使用鼠标在场景中移动物品的概念混淆了。 - undefined
1个回答

12

你是想在场景中移动一个图形项吗?如果是的话,那么你只需要为该项设置一些标志。例如:

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

如果你要在图形项上实现拖放,你必须为该项调用setAcceptDrops(true)

做这些额外的工作的原因是Qt默认尝试优化场景的性能。因此,你必须显式地选择一些额外的功能。你是在说:“我知道这会对性能产生负面影响,但我可以接受;我需要这个功能。”


嗨,但是我必须在哪里编写这个标志?在构造函数中吗? - undefined
是的,构造函数是一个理想的位置。我认为你可以从任何地方调用它们 - 这将在你调用它的地方改变行为。但如果你希望它“始终开启”,构造函数是最好的位置。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接