Qt最小化任务栏图标鼠标事件

时间:2014-04-08 04:39:12

标签: c++ windows qt qt5 taskbar

我几乎尽可能地尝试将任务栏图标的activate()信号挂钩到相应的插槽。但是,我不明白为什么Qt(Qt5 Cretor)说我没有匹配的插槽功能。

  

Qt错误:

     

C:\用户\马铃薯\桌面\ CCT-主\ CCTracker \ cctsystemtray.cpp:40:   错误:没有匹配的函数用于调用   'QObject :: connect(QSystemTrayIcon *&,const char *,CCTSystemTray *   const,const char *)'this,   SLOT(systrayActivated(QSystemTrayIcon :: ActivationReason)))

据我所知,根据Qt Documentation

activate()信号用于捕捉鼠标事件,例如点击和双击任务栏图标。起初尝试我认为它只是信号和插槽,但无论出于何种原因激活()只是不适合。如果我尝试将activate()连接到另一个类的插槽,由于指针错误,一切都会失败。

以下是 CCTSystemTray.h

中的工作部分
class CCTSystemTray
{
public:
    CCTSystemTray();
    void initSystemTray(QWidget *rootWindow);
private:
    QSystemTrayIcon* systray;

public slots:
    void systrayActivated(QSystemTrayIcon::ActivationReason);
};

CCTSystemTray.cpp

// Above are Class declearations, menu items, etc...

QObject::connect(this->systray, SIGNAL(QSystemTrayIcon::activated(QSystemTrayIcon::ActivationReason reason)),
        this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason)));
}

void CCTSystemTray::systrayActivated(QSystemTrayIcon::ActivationReason)
{
    qDebug() << "Hello";
}

可以在here上找到完整的代码示例pastebin

如果有人可以帮我脱毛,那就太好了!

谢谢大家。

1 个答案:

答案 0 :(得分:1)

您的类CCTSystemTray有一个插槽,但它不是QObject(它不是从QObject派生的,也不是从QObject派生的其他类),而且还需要Q_OBJECT宏在您的类声明中,然后信号和插槽将工作。