2010-10-25 19 views

Répondre

6

J'ai fait quelques recherches et voici ce que je suis venu avec:

Un QSystemTrayIcon ne peut pas gérer explicitement un glisser/déposer événement. Cependant, il existe une solution de contournement basée sur la méthode d'emplacement de l'icône de la barre d'état Spifftastic.

  1. Vous créez une icône unique de couleur et le placer comme l'icône d'un bref moment et prenez une capture d'écran de celui-ci.
  2. Étant donné que vous connaissez la séquence de couleur pour l'icône, vous pouvez rechercher à travers la capture d'écran et localiser l'emplacement de l'icône particulière .
  3. Un widget transparent est positionné sur l'icône et est utilisé comme cible de dépôt .

Je n'ai pas encore travaillé sur quelques-uns des détails les plus fins de l'opération, mais c'est l'essentiel. Tout bien considéré, c'est une façon de faire les choses, mais étant donné qu'il n'y a pas d'autres façons de le faire, je pense que c'est acceptable. Fluffy App (écrit en C#) utilise la méthode Spifftastic pour localiser l'icône de la barre d'état. Je suppose que la partie sur la fenêtre transparente est la façon dont ils accomplissent cela, mais je dois encore décompiler et examiner leur système.

1

Depuis QSystemTrayIcon est un QObject, pas un QWidget, je suppose que ce n'est pas possible. L'icône de la barre d'état système n'appartient pas vraiment à Qt - elle est transmise au 'bureau', c'est-à-dire quelle que soit la partie du Gnome/KDE/Windows/Mac qui dessine la zone concernée. Au moins sur Mac, vous seriez sur la barre de menu, ce qui serait une interface très étrange. Pour Gnome et KDE, c'est un standard FreeDesktop.org, mais encore une fois, je ne pense pas que ce soit votre processus qui réalise réellement le dessin, et par conséquent, Qt n'a aucun moyen d'obtenir des événements tels que le glisser-déposer.