问题描述:鼠标点击托盘,弹出一个菜单,但是不点击这个菜单的菜单项,而是将鼠标移至其他窗口,点击其他窗口(非托盘菜单所在程序的窗口),托盘菜单不消失。


网上搜到的解决方法是:

菜单初始化时,将:


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();



这样就能解决如题所述的问题了。