windows - QSystemTrayIcon 在托盘中留下了太多重复的图标

标签 windows qt

当我运行并退出我的应用程序时,它会在托盘中留下太多托盘图标,而不是只有一个。我还设置了我的应用程序,因此一次只能实例化一个实例,但在程序启动和退出几次后,系统托盘似乎容纳了所有图标,当我将鼠标悬停在它们上时,它们会慢慢下降(合法)一。我怎样才能停止创建这个重复的图标?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    systemTray = new QSystemTrayIcon();

    systemTray->setIcon( QIcon(":icons/Resources/Orange.ico") );

    systemTray->setVisible( true );
    systemTray->show();

    systemTray->setToolTip("Rigaku sync application");

    systemTrayIconMenu = new QMenu();

    systemTrayIconMenu->addAction( ui->actionOpen_App );
    systemTrayIconMenu->addAction( ui->actionSettings );
    systemTrayIconMenu->addAction( ui->actionClose );
    systemTrayIconMenu->addAction( ui->actionQuit );

    systemTray->setContextMenu( systemTrayIconMenu );
}

我在析构函数中删除了 systemTray 指针。

既然我们这样做了,我还希望能够双击托盘图标以调出应用程序。我怎样才能做到这一点?我知道我必须在双击时设置默认选项(在上下文菜单中也显示为粗体)但我该怎么做?谢谢!

更新

我现在可以使用 setDefaultAction() 显示默认菜单并双击托盘。现在我唯一的问题是如何摆脱系统托盘中的额外图标。

最佳答案

如果我没理解错的话,你正在使用 C/C++ exit 函数。

为了正确退出 Qt 应用程序,您必须调用此函数:

QCoreApplication::quit(); // Return code is 0

如果您想指定返回代码,请使用以下函数:

QCoreApplication::exit(YOUR_RETURN_CODE);

你也可以用QApplication代替QCoreApplication,没有区别。

因此,当使用其中一种方法时,托盘图标会在您退出应用程序后正确销毁。

关于windows - QSystemTrayIcon 在托盘中留下了太多重复的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31737227/

相关文章:

c - Windows - 程序使用了多少内存没有意义

windows - 单击编译按钮时 Inno Script Studio 无限期挂起

c++ - static const char * - 已定义但未使用

c++ - 将内存数据 ptr 映射到 qt 输入字段

c++ - Qt 从 QTextStream 读取

c++ - 在 Wireshark 中看到的数据报,Qt UDP 套接字未收到

windows - Services在Windows下能做什么?

c# - 在 XP 中禁用 WiFi 基础架构访问

iphone - 我可以使用 Windows 机器在应用商店上分发(而不是开发)我的 iOS 应用吗

c++ - Qt 应用程序无法加载自定义插件调试库