QSystemTrayIcon DoubleClick 激活会导致两个触发事件

问题描述 投票:0回答:1

我正在开发一个应用程序,其中有一个系统托盘图标。我正在尝试在系统托盘中捕获

QSystemTrayIcon::DoubleClick
。由于某种我不明白的原因,我一直无法捕捉。相反,我只得到两个
QSystemTrayIcon::Trigger
事件。我已经使用 Qt4 (
v4.8.7
) 和 Qt5 (
v5.5.1
) 尝试过此操作。我的平台是 KDE/Plasma 5(
v5.4.3
),在 Debian 测试上。我什至在 Debian 测试上提供的 LXDE 上也对此进行了测试。

所以我的问题是:这是 Qt 中的错误还是其他地方的其他问题?

/* My Header File */

class MyTrayIcon : public QSystemTrayIcon {
    Q_OBJECT

    public :
        NBTrayIcon();

    public slots:
        void handleActivation( QSystemTrayIcon::ActivationReason reason );

    private slots:
        void toggleVisible();
        void showInfo();
        void quit();

    Q_SIGNALS:
        void newWindow();
};

/* My Cpp File */

MyTrayIcon::MyTrayIcon() : QSystemTrayIcon() {

    setIcon( QIcon( ":/icons/newbreeze.png" ) );
    connect( this, SIGNAL( activated( QSystemTrayIcon::ActivationReason ) ), this, SLOT( handleActivation( QSystemTrayIcon::ActivationReason ) ) );

    QMenu *menu = new QMenu( "TrayMenu" );
    menu->addAction( "&Toggle Visible Windows", this, SLOT( toggleVisible() ) );
    menu->addAction( QIcon::fromTheme( "application-exit", QIcon( ":/icons/delete.png" ) ), "&Quit NewBreeze", this, SLOT( quit() ) );
    setContextMenu( menu );
};

void MyTrayIcon::handleActivation( QSystemTrayIcon::ActivationReason reason ) {

    qDebug() << reason;

    switch( reason ) {
        case MyTrayIcon::Context: {
            qDebug() << "Context";
            break;
        };

        case MyTrayIcon::MiddleClick: {
            qDebug() << "Middle Click";
            break;
        };

        case MyTrayIcon::Trigger: {
            qDebug() << "Trigger";
            break;
        }

        case MyTrayIcon::DoubleClick: {
            qDebug() << "DoubleClick";
            break;
        };

        default:{
            qDebug() << reason;
            break;
        };
    };
};

PS:我已经添加了上面列出的代码。

qt qt4 qt5 trayicon
1个回答
0
投票

我遇到了和你几乎一样的问题,我使用的是基于X11的Linux操作系统。我的托盘第一次工作正常,但在调用

tray_->hide();
tray_->show();
之后,我只能收到两个触发器,而不是一个触发器和一个DoubleClick。我解决这个问题的方法是每次更改托盘的可见性之前删除托盘。希望这能有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.