在Qt demo中可以找到Qt系统托盘的例子(Desktop -> System Tray)。
右击系统托盘,可以弹出上下文菜单。
然而在window下,弹出的菜单无法消失,必须点击菜单项或者应用程序窗体才会消失。
如图:
查阅Qt的BugReport,有相关记录。参见http://bugreports.qt.nokia.com/browse/QTBUG-7386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel。
按照issue给出的方法,没有能够解决这个问题。
参照Qt帮助文档:
void QSystemTrayIcon::setContextMenu ( QMenu * menu )
发现有如下说明:
Note: The system tray icon does not take ownership of the menu. You must ensure that it is deleted at the appropriate time by, for example, creating the menu with a suitable parent object.
注意到Qt demo中给出的示例是这样初始化上下文菜单的:
trayIconMenu = new QMenu(this);
也就是说,该上下文菜单的context是默认的应用程序窗体,然而文档中已经表述的非常清楚:
The system tray icon does not take ownership of the menu.
所以,当窗体获得焦点时,系统托盘的上下文菜单才会消失。换言之,如果该菜单的context是整个桌面的话,点击菜单之外的其他任何地方,菜单就会消失,这样我们的问题就解决了。
修改上文的初始化语句如下:
trayIconMenu = new QMenu(QApplication::desktop());
至此,我们成功解决了这个问题。
其实Qt的文档中已经做出了说明,所以严格来说,这个bug并不是Qt本身的bug。
希望本文对同样被这个问题困扰的Qt程序员有所帮助。
- 大小: 8.9 KB
分享到:
相关推荐
这里,`showAction`和`quitAction`分别对应“显示”和“退出”菜单项,`setContextMenu`方法将菜单设置为托盘图标的上下文菜单。 3. **处理托盘菜单事件** 当用户选择菜单项时,需要捕获这些事件。可以使用`...
为了让用户能够与系统托盘交互,我们可以为它添加一个上下文菜单(右键菜单)。创建一个`QMenu`,然后添加动作,最后关联到托盘图标: ```cpp QMenu *menu = new QMenu(this); QAction *showAction = menu->...
通过`QMenu`和`QAction`可以创建一个菜单,并将其设置为托盘图标的上下文菜单: ```cpp QMenu *menu = new QMenu(this); QAction *showAction = new QAction(tr("显示"), this); QAction *quitAction = new QAction...
在本文中,我们将深入探讨如何使用Qt框架实现托盘(系统托盘)的全部常用功能。Qt是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式应用程序。在Qt中,托盘通常指的是应用程序图标在操作系统任务栏右...
在这个"Qt系统托盘实例.zip"中,我们关注的是Qt如何实现系统托盘图标功能,这是一个在应用程序最小化或隐藏时,仍能在操作系统任务栏附近显示的小图标,以便用户快速访问应用功能。 系统托盘是许多应用程序的重要...
总结来说,Qt 5.5的托盘功能实现涉及创建QSystemTrayIcon对象,设置图标、上下文菜单,以及处理用户的激活事件。在开发过程中,要确保代码与所使用的Qt版本兼容,并根据实际需求添加适当的用户交互逻辑。
4. **创建菜单和动作**:通常,托盘图标会关联一个上下文菜单,通过`QMenu`和`QAction`类来创建菜单项和相应的动作。这些菜单项可以包括最小化、最大化、恢复窗口以及退出应用等功能。 5. **响应用户交互**:使用...
在本文中,我们将深入探讨如何使用Qt框架来创建一个GUI应用程序,使得在程序最小化时,它会隐藏到系统托盘区域,而不是完全从任务栏消失。这将增强用户体验,因为用户仍然可以通过托盘图标与程序进行交互。我们将...
在这个例子中,我们创建了一个QSystemTrayIcon对象,设置了应用图标,并为它创建了一个包含“退出”操作的上下文菜单。当用户右键点击托盘图标时,会看到这个菜单。我们还通过信号和槽机制连接了退出操作,当用户...
// 创建一个上下文菜单 QMenu *contextMenu = new QMenu(); // 添加菜单项 QAction *showAction = contextMenu->addAction("显示窗口"); QAction *quitAction = contextMenu->addAction("退出应用"); // 将...
这个类提供了创建、显示和管理托盘图标的接口,同时支持设置图标、添加上下文菜单以及处理用户交互事件。 该项目的描述提到,它包含源代码和编译好的程序,这对于初学者来说是一份宝贵的资源。通过阅读和分析源代码...
【Qt最小化至托盘】是一个使用Qt框架开发的功能,它允许应用程序在用户按下最小化按钮时,将窗口隐藏到系统托盘区域,而不是移出屏幕视线。这种设计模式常见于那些需要持续后台运行,而不需要频繁交互的软件,如聊天...
在Qt库中,`QSystemTrayIcon`是用于创建和管理系统托盘图标的关键类。这个类允许我们在任务栏的系统托盘区域显示一个小图标,通常与应用程序的状态或者快捷菜单相关联。在Windows 10环境下,使用Qt 5.9.0以及MinGW ...
除了基本的菜单功能,你还可以扩展系统托盘图标的功能,例如添加自定义的上下文菜单、状态提示、甚至动态改变图标。`SystemTrayIcon`还提供了其他属性和信号,如`message`(显示系统消息)和`activated`(当用户点击...
这个区域包含了各种应用程序的通知图标和上下文菜单,用户可以通过点击这些图标来访问程序的功能或者接收程序的通知。在本教程中,我们将深入探讨如何使用编程语言(如C#、C++或Java)实现一个仿制的任务栏托盘菜单...
3. **上下文菜单**: 托盘图标常常伴随一个上下文菜单,提供更多的功能选项。创建菜单项并为每个菜单项设置相应的事件处理器是必要的。 4. **动态更新图标**: 如果程序状态改变,如连接状态、新消息等,可以通过更新...
QMenu是QT中的菜单组件,通常出现在窗口的顶部或者右键点击后的上下文菜单中。在TGP模拟项目中,QMenu可以用于提供游戏分类、用户设置、帮助等选项。 6. **系统托盘**: QT支持创建系统托盘图标,使得即使应用...
这可能包括显示隐藏的窗口、执行特定功能,或者弹出一个上下文菜单。 4. **上下文菜单**:托盘图标常常伴随着一个上下文菜单,用户可以通过右键点击图标来访问。创建上下文菜单需要使用像`CreatePopupMenu`和`...
2. **API接口**:开发者通过Windows API(Application Programming Interface)来实现与系统托盘的交互,包括创建托盘图标、处理用户点击事件、显示上下文菜单等。API函数如`Shell_NotifyIcon()`用于添加、修改或...