Qt лоток значок перетаскивания

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

2 ответов


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

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

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

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

Fluffy App (написано на C#) использует метод Spifftastic для поиска значка в трее. Я предполагаю, что часть о прозрачное окно-это то, как они это делают, но мне еще предстоит декомпилировать и изучить их систему.


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