Windows – 当应用程序失去焦点时,Qt系统托盘上下文菜单仍然存在
发布时间:2020-12-14 02:48:41 所属栏目:Windows 来源:网络整理
导读:我为我的应用程序设置了一个系统托盘图标,并附加了一个简单的上下文菜单.如果我右键单击该图标以显示上下文菜单,它可以正常工作.如果我然后单击失去应用程序焦点的某个地方(例如,任务栏上的其他位置或其他应用程序),则不会删除上下文菜单,并且在单击时仍会触
我为我的应用程序设置了一个系统托盘图标,并附加了一个简单的上下文菜单.如果我右键单击该图标以显示上下文菜单,它可以正常工作.如果我然后单击失去应用程序焦点的某个地方(例如,任务栏上的其他位置或其他应用程序),则不会删除上下文菜单,并且在单击时仍会触发正确的操作.但是,如果我单击主应用程序,则上下文菜单会按预期消失.
以下是创建托盘图标和上下文菜单的相关代码 – actionExit = new QAction( "Exit",this ); connect( actionExit,SIGNAL( triggered() ),this,SLOT( ExitClient() )); myTrayIconMenu = new QMenu( this ); myTrayIconMenu->addAction( actionExit ); trayIcon = new QSystemTrayIcon( icon,this ); trayIcon->setContextMenu( myTrayIconMenu ); connect( systrayIcon,SIGNAL( activated( QSystemTrayIcon::ActivationReason )),SLOT( ToggleVisibility( QSystemTrayIcon::ActivationReason ))); trayIcon->show( ); 我是否需要添加自己的代码来测试应用程序失去焦点,以便我可以手动隐藏上下文菜单?我曾假设这个功能将被内置. [问题出现在Windows 7中,通过Qt插件使用Visual Studio 2010 Pro进行编译 – 我没有在任何其他操作系统下测试过] 我在API文档中注意到了这一点 –
如果我使用 myTrayIconMenu = new QMenu( ); 代替 myTrayIconMenu = new QMenu( this ); 当应用程序失去焦点时,将删除上下文菜单.但是,我需要注意手动删除上下文菜单. 其他人如何处理这种情况? 解决方法
在QApplication派生类而不是某些QWidget中实现QSystemTrayIcon可以解决此问题.
main.cpp中: int main(int argc,char *argv[]) { return TestApp(argc,argv).exec(); } testApp.cpp: TestApp::TestApp(int &argc,char **argv) : QApplication(argc,argv) { quitAction = new QAction("quit",this); connect(quitAction,SIGNAL(triggered()),SLOT(quit())); systemTrayMenu = new QMenu("tray menu"); systemTrayMenu->addAction(quitAction); trayIcon = new QSystemTrayIcon( this); trayIcon -> setToolTip("test app"); connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); trayIcon -> setContextMenu(systemTrayMenu); trayIcon -> show(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读