2011-09-04 3 views
0

J'ai beaucoup de qwidgets stationnaires sur l'écran et j'ai beaucoup d'autres widgets que je peux faire glisser sur l'écran. Quand un widget est déplacé au-dessus du widget stationnaire, le widget stationnaire doit exécuter du code. Je ne peux pas comprendre comment l'objet stationnaire peut savoir qu'il y a un widget dessus et savoir quel widget il est.Comment faire un qwidget savoir quand un autre qwidget est au-dessus

EDIT: L'objet que je glisse est déplacé par les fonctions que j'ai créées moi-même, et non par les fonctions de glissement Qt. C'est ce que j'utilise

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

Est-ce que dropEvent fonctionnera toujours avec cette méthode? J'ai essayé de faire un mais quand j'ai laissé tomber le widget au-dessus du widget stationnaire le dropEvent n'a jamais été entré.

Répondre

2

Vous devez faire l'objet stationnaire accepte les événements de déposer à l'aide setAcceptDrops(true), puis mettre en œuvre ces événements pour exécuter du code lorsque l'autre widget est traîné ou abandonné:

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