Russian Qt Forum

Qt => Общие вопросы => Тема начата: ecspertiza от Март 14, 2012, 10:40



Название: QSystemTray drop файл
Отправлено: ecspertiza от Март 14, 2012, 10:40
Возник такой вопрос, можно ли реализовать перенос файла на иконку в системном трее ? Что то в доке не вижу что можно такое сделать. Может есть какие хаки ?


Название: Re: QSystemTray drop файл
Отправлено: Bepec от Март 14, 2012, 10:43
Ну у меня конечно родилась гениальная мысль - при наведении мышкой создавать виджет принимающий drop, как раз на месте трей иконки. Прозрачный/полупрозрачный.


Название: Re: QSystemTray drop файл
Отправлено: Пантер от Март 14, 2012, 10:45
Скорее всего, нет.


Название: Re: QSystemTray drop файл
Отправлено: Пантер от Март 14, 2012, 10:45
Ну у меня конечно родилась гениальная мысль - при наведении мышкой создавать виджет принимающий drop, как раз на месте трей иконки. Прозрачный/полупрозрачный.
Как ты отследишь наведение?


Название: Re: QSystemTray drop файл
Отправлено: Bepec от Март 14, 2012, 10:51
Не заморачиваясь реализацией отвечаю:
1) просто держать там виджет всё время. (он сам и отловит drop а остальное будет пускать дальше)
2) не проверял, но вроде при наведении на иконку в трее идёт сигнал активатед с unknown резоном.
3) поиздеваться и переопределить toolTip и добавить в возврат строки создание виджета на N+1 секунд.
4) отслеживать мышкины передвижения. При захождению в область трея вызывать. (вот тут интересно, будет ли это отображаться на потреблении ресурсов)
5) написать свой евент фильтр/поставить - отследить наведение.
6) написать свой systemTraiIcon.

Пока что все )


Название: Re: QSystemTray drop файл
Отправлено: ecspertiza от Март 14, 2012, 10:58
Конечно возможно мое решение поспешно, но думается работать будет через задницу. Опять же интересно как создать виджет в трее ??? или его просто создавать на десктопе ? но тогда где его там создавать ? вроде же хрен отловишь позицию иконки в трее + в актив приходят только клики различные.


Название: Re: QSystemTray drop файл
Отправлено: _OLEGator_ от Март 14, 2012, 11:03
Грязные хаки. Слишком геморно будет отслеживать позицию иконки в трее.
Копался в исходниках QSystemTrayIcon? как там реализован перехват кликов?


Название: Re: QSystemTray drop файл
Отправлено: ecspertiza от Март 14, 2012, 11:41
ну под виндой ловит виндовые события NIN_KEYSELECT, WM_LBUTTONDBLCLK, WM_CONTEXTMENU и прочие и посылает activated под остальными ОС не смотрел


Название: Re: QSystemTray drop файл
Отправлено: Bepec от Март 14, 2012, 12:03
Я поел и полон сил :D счас развею ваши страхи и сомнения!!! (или добавлю новых :D)

Тырить движения мышки и проверять вхождение в иконку (QSystemTrayIcon->geometry()->contains(QCursor::pos())) - работает.
Ставить фильтр - непоняяятно. Не работает.

update: попробовал и остановился на тырении мышки и вхождении в иконку. Получается довольно красивое и элегантное решение.


Название: Re: QSystemTray drop файл
Отправлено: ernie от Март 15, 2012, 15:45
ВЕРЕС, а движения мышки как тырить,накладывать прозрачный виджет на весь экран или по таймеру?и что с производительностью в таком случае?:)


Название: Re: QSystemTray drop файл
Отправлено: Bepec от Март 15, 2012, 15:57
Я Верес :) большая буква ток 1 и то по настроению :D

Движение мышки тырится ф-ций QCursor::pos().
Виджет создаётся и накладывается только в момент нахождения указателя над иконкой.

Таймер не грузит систему :) В целом вообще незаметно ;)