问题描述:鼠标点击托盘,弹出一个菜单,但是不点击这个菜单的菜单项,而是将鼠标移至其他窗口,点击其他窗口(非托盘菜单所在程序的窗口),托盘菜单不消失。
网上搜到的解决方法是:
菜单初始化时,将:
trayIconMenu = new QMenu(this);
改为:
trayMenu = new QMenu(QApplication::desktop());
详见:
但是我在Qt5.3下试验,问题还是没有解决。
后来发现,换一下菜单的弹出方式就行了,原本我是这样写的:
QMenu * trayIconMenu;
trayIconMenu = new QMenu(this);
trayMenu->addAction("exit");
// 弹出
trayMenu->exec(QCursor::pos());
这样确实能实现,点击托盘弹出菜单,但是会出现开头所述的问题,即使将第二句改为trayIconMenu = new QMenu(QApplication::desktop());也无济于事。
解决方法:将菜单挂到托盘上,弹出时用托盘对象弹出:
QMenu * trayIconMenu;
trayIconMenu = new QMenu(this);
trayMenu->addAction("exit");
// 以上一样
// trayIcon是我的托盘对象
trayIcon->setContextMenu(trayMenu);
// 显示
trayIcon->show();
这样就能解决如题所述的问题了。