Linux — Как мне создать трейник с Qt / c ++ для всех ОС UNIX?

Я работаю с Qt / C ++, создавая свое собственное приложение, я хочу, чтобы оно было кроссплатформенным, пока все, что у него хорошо работает с Qt, единственная проблема — иконка в трее.

Я создаю иконку в трее и добавляю к ней меню, это прекрасно работает в Windows, но не работает в Linux. Я тестирую свое приложение на двух компьютерах и получаю два разных ответа.

На моем рабочем столе (Ubuntu 14.04) иконка в трее появляется в правой части панели задач, как и ожидалось, но не отображает меню. И в ноутбуке (также Ubuntu 14.04) значок в трее появляется в левой части панели задач, но в этом случае он показывает мне меню и сообщение, когда я дважды щелкаю по значку.

Я не знаю, есть ли другой способ сделать это, но здесь это мой код.

if (QSystemTrayIcon::isSystemTrayAvailable())
{
//trayicon
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(QIcon(":/Imagenes/iconosPERFQ-23.png"));
trayIcon->setToolTip(tr("PerfQ Client"));
trayIcon->setVisible(true);

connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
//Menu
logoutAction = new QAction(tr("&Logout"), this);
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(logoutAction);
// Add the menu to the trayicon
trayIcon->setContextMenu(trayIconMenu);

connect (logoutAction,SIGNAL(triggered()), this, SLOT(logout()));
}

и слот для активированного сигнала на лотке

void Task::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::DoubleClick:
QMessageBox::information(this,"Double Click", "Double click has been press on trayicon");
break;
default:
;
}
}

1

Решение

Код не является ошибкой — Ubuntu несколько лет назад изменила системное уведомление с sni (индикатор уведомлений о состоянии) на appnotifier, который работает через D-Bus и не имеет обратной совместимости с sni.

Тем не менее, в Ubuntu есть пакет — sni-qt и sni-qt: 386 — который помогает отображать иконки systray для приложений, созданных с Qt до версии 5.xx.

Также, если вы строите с Qt 5.xx — обновите Qt до 5.5. Он работает с новым appindicator через D-Bus.

2

Другие решения

Здесь нет QSystemTrayIcon::activated на Ubuntu. Единственное, что происходит, когда вы (один раз) щелкаете по значку, это то, что открывается контекстное меню.

Это факт, с которым вам приходится иметь дело, выбор пользовательского интерфейса, заимствованный из OS X. Он значительно упрощает взаимодействие с иконками в трее, потому что нет ни одного / двойного / правого щелчка, который каждое приложение использует по-своему. Просто меню, которое делает все.

Что касается вашего другого поведения: не могли бы вы проверить эти версии Ubuntu снова? Похоже, что различия пришли с переходом от Gnome к Unity. Способ работы со значками в трее в Gnome во многих отношениях отличается от того, что делает Ubuntu 15.04 в Unity.

0

По вопросам рекламы [email protected]