如何处理鼠标右键单击qsystemtrayicon



我已经将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);

相关内容

  • 没有找到相关文章

最新更新