【问题标题】:Qt Minimized Taskbar Icon Mouse EventQt 最小化任务栏图标鼠标事件
【发布时间】:2014-04-08 04:39:11
【问题描述】:

我已经尝试了几乎所有可能的方法来将任务栏图标的激活()信号连接到相应的插槽。但是,我不明白为什么 Qt(Qt5 Cretor) 说我没有插槽的匹配功能。

Qt 错误:

C:\Users\potato\Desktop\CCT-master\CCTracker\cctsystemtray.cpp:40: 错误:没有匹配的调用函数 'QObject::connect(QSystemTrayIcon*&, const char*, CCTSystemTray* const, const char*)'this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason)))

据我所知,根据Qt Documentation

activated() 信号用于捕获鼠标事件,例如任务栏图标的单击和双击。起初我认为它只是信号和插槽,但无论出于何种原因,activated() 都不适合。如果我尝试将 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";
}

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

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

谢谢大家。

【问题讨论】:

标签: c++ windows qt qt5 taskbar


【解决方案1】:

您的类CCTSystemTray 有一个插槽,但它不是QObject(它不是从QObject 或从QObject 派生的另一个类派生的)并且您还需要在类声明中使用Q_OBJECT 宏,然后信号和插槽都可以工作。

【讨论】:

  • 噢,谢谢。我尝试对 QObject 进行子类化,但这只会给我带来可怕的 qmake 和 vtable 错误。我将系统托盘重新与主窗口集成,它工作正常。正如 qt.developpez.com/doc/5.0-snapshot/desktop-systray 所解释的
  • 你有 Q_OBJECT 宏吗?而且有时您可能需要手动运行 qmake(从 Creator 中的 Build 菜单)。
  • 是的,我做到了。实现 Q_OBJECT 宏及其构造函数,然后手动运行 qmake,给了我不太记得的错误。我是使用Qt的方法做到的,它直接实现了带有主窗口的系统托盘图标。现在可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多