c++ - 如何处理鼠标右键单击 QSystemTrayIcon?

标签 c++ qt mouseevent 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::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/

相关文章:

c++ - 原子类型和线程

C++ - 指向类的指针数组

c++ - 如何在Qt中编写客户端-服务器应用程序和实现简单的协议(protocol)

java - 获取鼠标事件不是抽象错误

java - 创建我自己的右键单击事件

java - 跟踪鼠标光标android

c++ - 我可以从基于 for 循环的范围内获取项目的索引吗?

c++ - Qt - 像素操作后显示无符号字符

python - 为什么我重新实现的 QCheckBox.hitButton 只适用于检查指示器的一小部分区域?

c++ - 虚拟析构函数和 delete 关键字