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

时间:2015-07-31 02:37:02

标签: 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()显示默认菜单,然后双击托盘。现在我唯一的问题是如何摆脱系统托盘中的额外图标。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您使用的是C / C ++ exit函数。

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

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

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

QCoreApplication::exit(YOUR_RETURN_CODE);

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

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