我已经将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 ::触发器,当您左键单击时将调用。Qystemtrayicon :: DoubleClick在菜单时不会触发。
case QSystemTrayIcon::Trigger:
qDebug() << "Left clicked";
break;
如果那不适合您,则必须重新进化bool qsystemtrayicon :: event(qevent *e(,然后安装事件过滤器以检查按下哪个按钮。
新信号和插槽语法是
connect(tray, &QSystemTrayIcoon::activated, this, &MainWindow::handleClick /* assuming it's MainWindow */);
或lamba版本
connect(tray, &QSystemTrayIcoon::activated, [](QSystemTrayIcon::ActivationReason reason) { switch(reason) { /* .. */ } });
如果您不需要系统托盘图标的上下文菜单。
您可以使用QMenu
的信号void QMenu::aboutToShow()
,它检测到右键单击,但是您必须保留菜单而不操作,以使其实际上没有show
,您只需使用其mouse event
而不显示它即可。
这基本上将使它像您的QSystemTrayIcon
处理右键单击鼠标事件一样。
这是一个示例:
QSystemTrayIcon TrayIcon( QIcon("favicon.png") );
QMenu menu;
TrayIcon.show();
TrayIcon.setContextMenu(&menu);
QObject::connect(&menu,&QMenu::aboutToShow,some_function);