Это мой старый поток: Как мне создать рабочий индикатор с помощью Qt / C ++? , где мне предложили использовать библиотеку QSystemTray для создания иконки в трее в Ubuntu для моего приложения. [ 112]
Sniqt - это программа, которая заботится обо всем остальном. Как известно, Ubuntu избавилась от значков в трее. Вместо этого теперь используются индикаторы и только индикаторы. Sniqt преобразует значки в Qt-трее в рабочие индикаторы.
Проблема в том, что он не делает очень приличное преобразование. Такие действия, как один клик, средний щелчок и т. Д., Не работают, в то время как они выполняются в системах, которые поддерживают значки в трее.
Есть ли способ вернуть эти действия обратно? Могу ли я использовать значок QSystemTray и в то же время выполнять эти интересные (и очень полезные, в моем случае) действия в Ubuntu?
Я был бы рад узнать ответ на другой поток, о котором я говорил ранее (как сделать рабочий индикатор с использованием библиотек GTK и предотвращения сбоев), а также.
Ссылка на ошибку Sniqt: https://bugs.launchpad.net/sni-qt/+bug/1027652
Кажется, что Qt не поддерживает эту вещь, по крайней мере, в Ubuntu Unity, даже если у него есть сигнал «активирован». Поэтому я бы порекомендовал вам использовать GTK и обычный traicicon, я не вижу альтернативы с Qt. Вы можете связаться с разработчиками Qt для разъяснения этого.
Unity, по выбору, не поддерживает то, что вы называете «иконками приличного трея». Это индикаторы или ничего. Оттуда у вас есть несколько вариантов:
Обойтись с ограниченными возможностями индикатора. Вы можете установить меню, которое будет использоваться вашим индикатором, с помощью стандартного метода QSystemTray.setContextMenu ().
Полностью отсоедините ваше приложение от systray. Например, превратите его в плавающую иконку на рабочем столе, которая сможет принимать средние и правые щелчки, как задумал Бог и Матиас Эттрих. Вы можете найти простой пример того, как это сделать, здесь: http://kde-apps.org/content/show.php/KEyes?content=51493 (При желании, делайте это только при обнаружении этого вы работаете в Unity, т.е. если для $ DESKTOP_SESSION установлено значение 'ubuntu'.)
Объявить Unity неподдерживаемым. Это не очень хороший вариант.
Если вы захотите выбрать вариант 1 или 2, в основном зависит от того, что делает ваше приложение.