• 7836阅读
  • 4回复

[提问]关于QSystemTrayIcon响应鼠标进入和离开事件的问题。 [复制链接]

上一主题 下一主题
离线ttsszzyy
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-23
我想实现一个类似于QQ消息提示的功能,当鼠标进入托盘图标后,弹出自定义对话框,离开后,怎么对话框消失。我用了QSystemTrayIcon的event函数和安装事件过滤器,可是始终没有办法获取鼠标进入托盘的事件。想到有一个ToolTip事件,可是对于QSystemTrayIcon来说,就算设置了tooltip,然后捕获QEvent::ToolTip事件,基本上一点反应都没有,过滤的可是整个应用程序的事件都没有办法,求助高手相助一下。此问题已经困扰我许久了,心里难受啊,QT伤不起啊。
直到精通Qt为止~~~
离线roywillow

只看该作者 1楼 发表于: 2012-04-23
你有没有确定一下event中捕获的是什么事件?比如说直接把event的类型给输出出来?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ttsszzyy
只看该作者 2楼 发表于: 2012-04-23
回 1楼(roywillow) 的帖子
event的所有与鼠标有关的事件我都试着捕获了,但是只有QSystemTrayIcon捕获不到任何与鼠标有关的事件,当鼠标进入托盘图标以后,根本没有任何反应。
直到精通Qt为止~~~
离线passion_wu
只看该作者 3楼 发表于: 2012-04-24
event 捕获的只是Qt能够处理的时间, 你说的事件需要用这个函数捕获
bool Application::winEventFilter ( MSG * msg, long * result )

这样需要继承Application
我参考了下Qt的源代码文件:qsystemtrayicon_win.cpp文件,写了个测试程序
#include <qt_windows.h>
#include <QApplication>

class Application : public QApplication
{
       Q_OBJECT
public:
       Application(int &argc, char **argv)
    :QApplication(argc, argv)
      {
      }
       bool winEventFilter ( MSG * msg, long * result ){
    if(msg->message == WM_APP + 101)
    {
               //鼠标在图标上的hover事件, to do something
                              qDebug("hover...");
    }
    return QApplication::winEventFilter(msg, result);
     }
};

但是鼠标的enter,hover,leave 事件都会执行注释处的代码,这个问题很难解决, 你可以参考下这篇文章:
http://www.vbgood.com/thread-97218-1-1.html
离线passion_wu
只看该作者 4楼 发表于: 2012-04-24
这个方法只是用与Windows平台,如果你不是Windows平台,
可以参考qsystemtrayicon_win.cpp目录下其它平台的实现文件。
快速回复
限100 字节
 
上一个 下一个