QSystemTrayicon左右单击左右单击

QSystemTrayIcon handle left and right click separately?

本文关键字:单击 左右 QSystemTrayicon      更新时间:2023-10-16

i有一个称为statusicon的类,该类扩展了qsystemtrayicon。我想设置它,以便右键单击打开上下文菜单,左键单击打开一个窗口。

当前默认行为似乎是左右单击"打开上下文"菜单。

我需要找到一种方法来阻止左键单击并运行自己的代码。

从文档中,看起来可以使用EventFilter来实现这一目标,我已经在Susticy中设置了EventFilter方法,其中QDEBUG中的其中有一个。这不会用右键或左键单击。

我使用以下代码线安装了它:

this->installEventFilter(this)

我想知道它是否已成为已经覆盖虚拟方法,因为我将qsystemtrayicon作为超级类。

有人知道为什么不称呼事件窗口吗?

有人可以想到一种实现此功能的方法吗?

您不需要eventFilter。左点击:

//somewhere in constructor
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(showHide(QSystemTrayIcon::ActivationReason)));
//...
void MainWindow::showHide(QSystemTrayIcon::ActivationReason r)
{
    if (r == QSystemTrayIcon::Trigger)
        {
            if (!this->isVisible()) { 
                this->show();
            } else {
                this->hide();
            }
        }
}

菜单,只需使用setContextMenu()

QMenu *menu = new QMenu(this);
//for example
menu->addAction(showHideAct);
menu->addAction(optionAct);
menu->addAction(infoAct);
menu->addSeparator();
menu->addAction(quitAct);
tray = new QSystemTrayIcon();
tray->setIcon(QIcon("://data/tray.png"));
tray->setContextMenu(menu);//important method for you
tray->show();