Qt QSystemTrayIcon未发送激活信号

Posted

技术标签:

【中文标题】Qt QSystemTrayIcon未发送激活信号【英文标题】:Qt QSystemTrayIcon not sending activated signal 【发布时间】:2009-06-27 17:26:09 【问题描述】:

我正在尝试在此处复制 Qt 系统托盘示例: http://doc.qt.io/archives/4.6/desktop-systray.html

除了 QSystemTrayIcon 对象没有发送激活信号之外,一切似乎都在工作。

这是我的 mainwindow.cpp 代码:

#include <QtGui>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)

    ui->setupUi(this);
    QMessageBox::information(0, tr("Systray"),
                              tr("Loaded."));
    createTrayIcon();

    connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,
            SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

    trayIcon->show();


void MainWindow::createTrayIcon()

    trayIcon = new QSystemTrayIcon(this);



void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)

    QMessageBox::information(0, tr("Systray"),
                              tr("Testing"));



void MainWindow::messageClicked()

     QMessageBox::information(0, tr("Systray"),
                              tr("Sorry, I already gave what help I could.\n"
                                 "Maybe you should try asking a human?"));
 

MainWindow::~MainWindow()

    delete ui;

我在 Windows XP SP2 上使用 Qt 4.5.2。这可能是 Windows XP 的问题吗?还是我做错了什么?我没有为托盘图标设置 QIcon。有问题吗?

任何帮助将不胜感激。

谢谢! 杰人

【问题讨论】:

从您的描述中不清楚,因此我不得不问:原始(来自 Qt)系统托盘图标示例是否有效? 刚刚测试过了。右键单击确实有效,但奇怪的是双击没有。但由于某种原因,SystemTray 对象甚至没有发送 activate() 信号。我什至设置了一个QIcon。依然没有。咕咕咕。 【参考方案1】:

如果有人感兴趣,我发现了这个问题。问题其实出在头文件中。

这是一个有效的方法:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QSystemTrayIcon>


class MainWindow : public QWidget

    Q_OBJECT

public:
    MainWindow();

private slots:
    void iconActivated(QSystemTrayIcon::ActivationReason reason);
private:
    QAction *minimizeAction;
     QAction *maximizeAction;
     QAction *restoreAction;
     QAction *quitAction;

     QSystemTrayIcon *trayIcon;
    void createActions();
    void createTrayIcon();

    void messageClicked();
;

#endif // MAINWINDOW_H

iconActivated 需要声明为私有插槽。我将它声明为私有函数。

【讨论】:

很高兴看到您解决了问题!我认为您可能应该关闭这个问题,因为它仍然出现在未回答的列表中。 ***.com/questions/127588/…> 对不起,工作链接是***.com/questions/127588/… 是的,对不起,伙计...当我第一次尝试关闭它时,它告诉我必须等待一段时间。然后我忘记了……我正在研究这个程序是为了:-) 你应该解释是什么解决了你的问题,而不是转储一堆代码。 @Jieren,如果我要制作自己的托盘图标类,我应该将 iconActivated 放在哪里?

以上是关于Qt QSystemTrayIcon未发送激活信号的主要内容,如果未能解决你的问题,请参考以下文章

QSystemTrayIcon 未显示在 Ubuntu 14.04 的通知区域中

Qt 系统托盘(加hover效果)

Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]

有啥方法可以通过 Qt Designer 添加 QSystemTrayIcon

QT之Qml使用QSystemTrayIcon实现系统托盘

Gtk 开关激活信号未触发