`
zhc0822
  • 浏览: 230494 次
  • 性别: Icon_minigender_1
  • 来自: 宝仔的奇幻城堡
社区版块
存档分类
最新评论

解决Qt系统托盘上下文菜单无法消失的问题

    博客分类:
  • Qt
阅读更多

在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
3
5
分享到:
评论
1 楼 ZeaLoVe 2011-11-23  
怎么被踩的这么狠啊。。。顶下haha

相关推荐

    Qt 实现系统托盘,托盘菜单,托盘消息.zip

    这里,`showAction`和`quitAction`分别对应“显示”和“退出”菜单项,`setContextMenu`方法将菜单设置为托盘图标的上下文菜单。 3. **处理托盘菜单事件** 当用户选择菜单项时,需要捕获这些事件。可以使用`...

    Qt之系统托盘

    为了让用户能够与系统托盘交互,我们可以为它添加一个上下文菜单(右键菜单)。创建一个`QMenu`,然后添加动作,最后关联到托盘图标: ```cpp QMenu *menu = new QMenu(this); QAction *showAction = menu->...

    关于qt系统托盘的资料

    通过`QMenu`和`QAction`可以创建一个菜单,并将其设置为托盘图标的上下文菜单: ```cpp QMenu *menu = new QMenu(this); QAction *showAction = new QAction(tr("显示"), this); QAction *quitAction = new QAction...

    Qt实现托盘全部常用功能示例

    在本文中,我们将深入探讨如何使用Qt框架实现托盘(系统托盘)的全部常用功能。Qt是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式应用程序。在Qt中,托盘通常指的是应用程序图标在操作系统任务栏右...

    Qt系统托盘实例.zip

    在这个"Qt系统托盘实例.zip"中,我们关注的是Qt如何实现系统托盘图标功能,这是一个在应用程序最小化或隐藏时,仍能在操作系统任务栏附近显示的小图标,以便用户快速访问应用功能。 系统托盘是许多应用程序的重要...

    Qt 5.5 托盘功能实现

    总结来说,Qt 5.5的托盘功能实现涉及创建QSystemTrayIcon对象,设置图标、上下文菜单,以及处理用户的激活事件。在开发过程中,要确保代码与所使用的Qt版本兼容,并根据实际需求添加适当的用户交互逻辑。

    Qt创建托盘图标

    4. **创建菜单和动作**:通常,托盘图标会关联一个上下文菜单,通过`QMenu`和`QAction`类来创建菜单项和相应的动作。这些菜单项可以包括最小化、最大化、恢复窗口以及退出应用等功能。 5. **响应用户交互**:使用...

    Qt之程序最小化托盘显示及操作

    在本文中,我们将深入探讨如何使用Qt框架来创建一个GUI应用程序,使得在程序最小化时,它会隐藏到系统托盘区域,而不是完全从任务栏消失。这将增强用户体验,因为用户仍然可以通过托盘图标与程序进行交互。我们将...

    centos下系统托盘

    在这个例子中,我们创建了一个QSystemTrayIcon对象,设置了应用图标,并为它创建了一个包含“退出”操作的上下文菜单。当用户右键点击托盘图标时,会看到这个菜单。我们还通过信号和槽机制连接了退出操作,当用户...

    Qt托盘源码

    // 创建一个上下文菜单 QMenu *contextMenu = new QMenu(); // 添加菜单项 QAction *showAction = contextMenu->addAction("显示窗口"); QAction *quitAction = contextMenu->addAction("退出应用"); // 将...

    系统托盘自定义图标工具(附C++源码)

    这个类提供了创建、显示和管理托盘图标的接口,同时支持设置图标、添加上下文菜单以及处理用户交互事件。 该项目的描述提到,它包含源代码和编译好的程序,这对于初学者来说是一份宝贵的资源。通过阅读和分析源代码...

    Qt最小化至托盘.zip

    【Qt最小化至托盘】是一个使用Qt框架开发的功能,它允许应用程序在用户按下最小化按钮时,将窗口隐藏到系统托盘区域,而不是移出屏幕视线。这种设计模式常见于那些需要持续后台运行,而不需要频繁交互的软件,如聊天...

    Qt笔记(二十四)之系统托盘QSystemTrayIcon 例子源码

    在Qt库中,`QSystemTrayIcon`是用于创建和管理系统托盘图标的关键类。这个类允许我们在任务栏的系统托盘区域显示一个小图标,通常与应用程序的状态或者快捷菜单相关联。在Windows 10环境下,使用Qt 5.9.0以及MinGW ...

    SystemTrayIcon.zip

    除了基本的菜单功能,你还可以扩展系统托盘图标的功能,例如添加自定义的上下文菜单、状态提示、甚至动态改变图标。`SystemTrayIcon`还提供了其他属性和信号,如`message`(显示系统消息)和`activated`(当用户点击...

    实现_仿制任务栏托盘菜单

    这个区域包含了各种应用程序的通知图标和上下文菜单,用户可以通过点击这些图标来访问程序的功能或者接收程序的通知。在本教程中,我们将深入探讨如何使用编程语言(如C#、C++或Java)实现一个仿制的任务栏托盘菜单...

    托盘源代码

    3. **上下文菜单**: 托盘图标常常伴随一个上下文菜单,提供更多的功能选项。创建菜单项并为每个菜单项设置相应的事件处理器是必要的。 4. **动态更新图标**: 如果程序状态改变,如连接状态、新消息等,可以通过更新...

    使用QT模仿TGP腾讯游戏平台

    QMenu是QT中的菜单组件,通常出现在窗口的顶部或者右键点击后的上下文菜单中。在TGP模拟项目中,QMenu可以用于提供游戏分类、用户设置、帮助等选项。 6. **系统托盘**: QT支持创建系统托盘图标,使得即使应用...

    托盘效果源代码 托盘效果源代码

    这可能包括显示隐藏的窗口、执行特定功能,或者弹出一个上下文菜单。 4. **上下文菜单**:托盘图标常常伴随着一个上下文菜单,用户可以通过右键点击图标来访问。创建上下文菜单需要使用像`CreatePopupMenu`和`...

    SystemTrayMenu-轻松浏览和打开文件.zip

    2. **API接口**:开发者通过Windows API(Application Programming Interface)来实现与系统托盘的交互,包括创建托盘图标、处理用户点击事件、显示上下文菜单等。API函数如`Shell_NotifyIcon()`用于添加、修改或...

Global site tag (gtag.js) - Google Analytics