Qt лоток значок перетаскивания
кто-нибудь знает, можно ли использовать перетаскивание с помощью значка в трее с помощью Qt?
2 ответов
Я делал некоторые исследования и вот что я придумал:
QSystemTrayIcon не может явно обрабатывать событие перетаскивания. Однако существует обходной путь на основе метода расположения значков в трее Spifftastic.
- вы создаете уникальный цветной значок и поместите его в качестве значка для краткого момент и сделайте снимок экрана.
- учитывая, что вы знаете цвет последовательность для значка, вы можете поиск по скриншоту и найдите особенно иконы местоположение.
- прозрачный виджет расположен над значком и используется как целевой объект перетаскивания.
Мне еще предстоит поработать над некоторыми более тонкими деталями операции, но в этом суть. Все это является хакерским способом, но учитывая, что нет других способов сделать это, я думаю, что это приемлемо.
Fluffy App (написано на C#) использует метод Spifftastic для поиска значка в трее. Я предполагаю, что часть о прозрачное окно-это то, как они это делают, но мне еще предстоит декомпилировать и изучить их систему.
поскольку QSystemTrayIcon является QObject, а не QWidget, я предполагаю, что это невозможно. Значок в системном трее на самом деле не принадлежит Qt - он передается на "рабочий стол", i.e любая часть Gnome/KDE/Windows / Mac рисует соответствующую область. По крайней мере, на Mac вы бы упали в строке меню, что было бы очень странным пользовательским интерфейсом. Для Gnome и KDE это FreeDesktop.org стандартный, но опять же я не думаю, что это ваш процесс, который на самом деле делает рисунок, и, следовательно, для Qt нет способа получить события, такие как перетаскивание к вам.