Как заставить qwidget знать, когда над ним находится другой qwidget

У меня много стационарных виджетов на экране и много других виджетов, которые я могу перетаскивать по экрану. Когда виджет перетаскивается поверх стационарного виджета, стационарный виджет должен выполнить некоторый код. Я не могу понять, как стационарный объект может знать, что над ним есть виджет, и знать, какой это виджет.

РЕДАКТИРОВАТЬ: объект, который я перетаскиваю, перетаскивается функциями, которые я создал сам, а не функциями Qt Drag. Это то, что я использую

void Piece::mouseMoveEvent(QMouseEvent *event) 
{ 
     if(event->buttons() == Qt::LeftButton && turn == color) 
     { 
          x = event->globalX()-18;
          y = event->globalY()-18;
          move(x,y);
     }
}

Будет ли dropEvent по-прежнему работать с использованием этого метода? Я попытался сделать это, но когда я бросил виджет поверх стационарного виджета, dropEvent никогда не вводился.


person gsingh2011    schedule 04.09.2011    source источник


Ответы (1)


Вам нужно заставить стационарный объект принимать события перетаскивания с помощью setAcceptDrops(true), а затем реализовать эти события для выполнения некоторого кода, когда другой виджет перетаскивается или отбрасывается:

void dragMoveEvent(QDragMoveEvent* event);
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
person laurent    schedule 05.09.2011