我已将 QSystemTrayIcon::ActivationReason 连接到我的“handleClick”插槽,如下所示
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this,SLOT(handleClick(QSystemTrayIcon::ActivationReason)));
mywindow::handleClick(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick:
handleLeftClickOnTray();
break;
case QSystemTrayIcon::MiddleClick:
break;
default:;
}
}
我有另一个名为“handleRightClickOnSystemTray()”的函数,当鼠标右键单击系统托盘图标时应该调用该函数。此函数创建一个 QDialog 框并显示它。如何处理系统托盘上的鼠标右键事件?
最佳答案
您可以使用 QSystemTrayIcon::Trigger当您左键单击时将调用它。 QSystemTrayIcon::DoubleClick菜单就位时不会触发。
case QSystemTrayIcon::Trigger:
qDebug() << "Left clicked";
break;
如果这对您不起作用,那么您必须重新实现 bool QSystemTrayIcon::event(QEvent *e)并安装事件过滤器以检查按下了哪个按钮。
新的信号槽语法是
connect(tray, &QSystemTrayIcoon::activated, this, &MainWindow::handleClick /* assuming it's MainWindow */);
或者兰巴版本
connect(tray, &QSystemTrayIcoon::activated, [](QSystemTrayIcon::ActivationReason reason) { switch(reason) { /* .. */ } });
关于c++ - 如何处理鼠标右键单击 QSystemTrayIcon?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49631493/