Qt Tray Icon Drag and Drop - PullRequest
       16

Qt Tray Icon Drag and Drop

6 голосов
/ 25 октября 2010

Кто-нибудь знает, возможно ли использовать перетаскивание с иконкой в ​​трее с помощью Qt?

Ответы [ 2 ]

6 голосов
/ 28 октября 2010

Я провел некоторое исследование, и вот что я придумал:

QSystemTrayIcon не может явно обработать событие перетаскивания. Однако есть обходной путь, основанный на методе определения местоположения пиктограммы в Spifftastic.

  1. Вы создаете уникальный значок и поместите его в качестве значка для краткого момент и сделай скриншот.
  2. Учитывая, что вы знаете цвет последовательность для значка, вы можете поиск по скриншоту и найдите конкретную иконку место.
  3. Прозрачный виджет расположен над значком и используется в качестве падение цели.

Мне еще предстоит проработать некоторые мелкие детали операции, но в этом суть. Все вещи считаются хакерскими, но учитывая, что других способов сделать это нет, я думаю, что это приемлемо.

Пушистое приложение (написанное на C #) использует метод Spifftastic, чтобы найти значок в трее. Я предполагаю, что часть о прозрачном окне заключается в том, как они этого добиваются, но мне еще предстоит декомпилировать и исследовать их систему.

1 голос
/ 26 октября 2010

Поскольку QSystemTrayIcon является QObject, а не QWidget, я думаю, это невозможно.Иконка в системном трее на самом деле не принадлежит Qt - она ​​передается на «рабочий стол», то есть независимо от того, какая часть Gnome / KDE / Windows / Mac рисует соответствующую область.По крайней мере, на Mac вы бы попали в строку меню, что было бы очень странным интерфейсом.Для Gnome и KDE это стандарт FreeDesktop.org, но, опять же, я не думаю, что это ваш процесс, который на самом деле выполняет рисование, и, следовательно, у Qt нет способа получить такие события, как перетаскивание.

...