void main_window::create_tray_icon()
{
m_tray_icon = new QSystemTrayIcon(QIcon(":/icon.png"), this);
connect(m_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_show_hide(QSystemTrayIcon::ActivationReason)));
QAction *quit_action = new QAction("Exit", m_tray_icon);
connect(quit_action, SIGNAL(triggered()), this, SLOT(on_exit()));
QAction *hide_action = new QAction("Show/Hide", m_tray_icon);
connect(hide_action, SIGNAL(triggered()), this, SLOT(on_show_hide()));
QMenu *tray_icon_menu = new QMenu;
tray_icon_menu->addAction(hide_action);
tray_icon_menu->addAction(quit_action);
m_tray_icon->setContextMenu(tray_icon_menu);
m_tray_icon->show();
}
void main_window::on_show_hide(QSystemTrayIcon::ActivationReason reason)
{
if(reason)
{
if(reason != QSystemTrayIcon::DoubleClick)
return;
}
if(isVisible())
{
hide();
}
else
{
show();
raise();
setFocus();
}
}
Así es como me doy cuenta de un "minimizar a la bandeja". Ahora puede minimizar haciendo doble clic en el icono, o haciendo clic con el botón derecho y seleccionando "Mostrar/Ocultar" en el menú.
Por experiencia personal he aprendido que por lo general no quiere esto. La bandeja no es el lugar para aplicaciones minimizadas. La bandeja es el lugar correcto para los applets que miran eventos (Bluetooth, estado de la red, ese tipo de cosas). Si su aplicación contiene ese tipo de funcionalidad, puede ser aconsejable dividir esa parte en su propio proceso. Este proceso de ayuda aparecerá siempre en la bandeja y en ningún otro lugar. – MSalters
Sin embargo, algunos usuarios les gusta esta funcionalidad. En mi aplicación, no es el comportamiento predeterminado, pero se presenta como una opción en el cuadro de diálogo de preferencias. Me imagino que ese tipo de equilibrio equilibra el diseño y la preferencia del usuario. –