Come implementare il widget drag-n-drop in un altro contenitore in qt?[Chiuso]

StackOverflow https://stackoverflow.com//questions/20002566

  •  20-12-2019
  •  | 
  •  

Domanda

Ho una finestra con diversi contenitori.Qual è il modo più semplice per implementare il drag-n-drop tra di loro?

È stato utile?

Soluzione

Devi usare a QDrag* oggetto.Quindi reimplementare:

virtual void mousePressEvent(QMouseEvent * event);
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent *event);

All'interno di questi eventi gestirai un punto iniziale (dove inizia il trascinamento) e un punto finale (dove rilasci il widget).Utilizzerai anche il protocollo MIME per consentire al framework di gestire l'operazione di drag and drop.

Un articolo più utile sul trascinamento della selezione è questo: Trascina e rilascia

Altri suggerimenti

Il modo più semplice, suppongo, sarebbe creare eventFilter classe, dove filtreresti gli eventi trascina e rilascia e installare Esso (someWidget->installEventFilter) a tutti i tuoi widget, dove desideri trascinarli e rilasciarli.Esempio da documenti - Qui

aggiornamento:

Il problema con eventfilter è che non è necessario creare una sottoclasse di tutti i widget affinché possano essere trascinati e rilasciati.Basta installare il filtro su qualsiasi widget su cui desideri avere il filtro dnd e lo avrà.

Per quanto riguarda il filtro stesso, non sempre blocca gli eventi, ecc. (lo farà se è questa la tua intenzione).Era solo un esempio di come usarlo.

Solo una delle innumerevoli opzioni con il trascinamento della selezione:in dropEvent, dragMoveEvent, dragEnterEvent il tuo filtro ricorderà il puntatore a ciò che vuoi rilasciare e in dropEvent emette un segnale con l'oggetto, quell'evento mantiene il puntatore e lo cattura con il widget dove lo rilasci, e questo è tutto, qualsiasi widget che abbia il filtro installato avrà il trascinamento della selezione.

Il punto centrale del filtro eventi NON è preoccuparsi di creare sottoclassi e connettere OGNI singolo widget se si dispone del tipo di evento comune, si desidera acquisire ed elaborare in modo simile, ad esempio trascinando e rilasciando eventi.

Supponevo che tu sapessi come trascinare e rilasciare, ma ho pensato che sovrascrivere gli eventi in tutti i widget con lo stesso codice ancora e ancora e ancora potrebbe non essere così corretto.Quindi ti ho mostrato come farlo facilmente con un filtro eventi per tutti i widget che desideri trascinare e rilasciare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top