2010-10-25 10 views

risposta

6

Ho fatto qualche ricerca e qui è quello che ho messo a punto:

Un QSystemTrayIcon non può gestire in modo esplicito un drag/drop evento. Tuttavia, esiste una soluzione alternativa basata sul metodo di posizione dell'icona della barra Spifftastic.

  1. Si crea un'icona colorata in modo univoco e posizionarlo come icona per un breve momento e prendere uno screenshot di esso.
  2. Dato che si conosce la sequenza di colori per l'icona, è possibile cercare nello screenshot e individuare la posizione dell'icona particolare.
  3. Un widget trasparente è posizionato su sull'icona e viene utilizzato come destinazione di rilascio .

Devo ancora lavorare su alcuni dei dettagli più fini dell'operazione, ma questo è il senso. Tutto considerato è un modo hacky di cose, ma dato che non ci sono altri modi per farlo penso che sia accettabile.

Fluffy App (scritto in C#) utilizza il metodo Spifftastic per individuare l'icona del vassoio. Sto assumendo che la parte relativa alla finestra trasparente sia il modo in cui lo ottengono, ma devo ancora decompilare ed esaminare il loro sistema.

1

Poiché QSystemTrayIcon è un QObject, non un QWidget, suppongo che ciò non sia possibile. L'icona della barra delle applicazioni non è di proprietà di Qt, ma viene passata sul "desktop", vale a dire qualsiasi parte di Gnome/KDE/Windows/Mac sta disegnando l'area pertinente. Almeno su Mac, dovresti cadere sulla barra dei menu, che sarebbe un'interfaccia utente molto strana. Per Gnome e KDE è uno standard di FreeDesktop.org, ma di nuovo non penso che sia il tuo processo che effettivamente fa il disegno, e quindi non c'è modo per Qt di ottenere eventi come il trascinamento della selezione.