c++ - QSystemTrayIcon 分别处理左键和右键?

标签 c++ qt qt5 qt5.4

我有一个名为 StatusIcon 的类,它扩展了 QSystemTrayIcon。我想设置它,所以右键单击打开上下文菜单,左键单击打开一个窗口。

目前默认行为似乎是左键和右键单击打开上下文菜单。

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

从文档来看,这似乎可以使用 eventFilter 来实现,我在 StatusIcon 上设置了一个 eventFilter 方法,其中包含一个 qdebug。这不会通过右键或左键单击来调用。

我使用一行代码安装了它:

this->installEventFilter(this)

我想知道它是否无法正常工作,因为它已经覆盖了虚拟方法,因为我已经将 QSystemTrayIcon 作为父类(super class)。

有谁知道为什么没有调用 eventFilter?

谁能想办法实现这个功能?

最佳答案

您不需要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();

关于c++ - QSystemTrayIcon 分别处理左键和右键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036779/

相关文章:

c++ - 简单的数值表达式求解器

c++ - 如何用某种颜色填充 QGraphicsRectItem?

qt - Qt 5 中的 OpenGL 与 QOpenGL/QtOpenGL : differences and limitations?

c++ - 在模板头文件末尾包含 .cpp

c++ - C++ 开发人员应了解的有关网络编程的所有知识?

c++ - 程序第一次要求输入 3 次,然后在不应该输入时输入两次并过早结束

c++ - Qt QSslSocket "The certificate is self-signed, and untrusted"

c++ - 两个浮点无穷大值的 QCOMPARE

c++ - 如何从另一个类编辑 QMainWindow UI 小部件?

c++ - 如何在调整大小时保持相同的场景部分可见?