Как заставить qwidget знать, когда над ним находится другой qwidget - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть много стационарных 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 никогда не вводился.

1 Ответ

2 голосов
/ 05 сентября 2011

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

void dragMoveEvent(QDragMoveEvent* event);
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
...