我有一个名为StatusIcon的类,它扩展了QSystemTrayIcon。我想设置它,然后右键单击打开上下文菜单,左键单击打开一个窗口。
目前,默认行为似乎是左右键单击打开上下文菜单。
我需要找到一种方法来阻止左键单击并运行我自己的代码。
从文档中可以看出这可以使用eventFilter来实现我在StatusIcon上设置了一个带有qdebug的eventFilter方法。通过右键或左键单击不会调用此方法。
我使用一行代码安装它,如:
this->installEventFilter(this)
我想知道它是不是因为它已经覆盖了虚拟方法,因为我已经将QSystemTrayIcon作为超类。
有谁知道为什么没有调用eventFilter?
有人能想到实现此功能的方法吗?
答案 0 :(得分:3)
您不需要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();