【发布时间】:2015-07-31 02:37:01
【问题描述】:
当我运行并退出我的应用程序时,它会在托盘中留下太多托盘图标,而不仅仅是一个。我还设置了我的应用程序,因此一次只能实例化一个实例,但是在程序多次启动和退出之后,系统托盘似乎可以容纳所有图标,当我将鼠标悬停在它们上时它们会慢慢下降(合法)一。我怎样才能停止创建这个重复的图标?
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() 显示默认菜单并双击托盘。现在我唯一的问题是如何去掉系统托盘中多余的图标。
【问题讨论】:
-
同时调用
QSystemTrayIcon::setVisible(true)和QSystemTrayIcon::show()是多余的。使用其中一种。在删除systemTray对象之前,您是否尝试过调用setVisible(false)/hide()?您使用QMenu::setDefaultAction()设置默认菜单项,将addAction()返回的QAction*传递给它。使用QAction:::triggered信号响应菜单项点击。使用QSystemTrayIcon::activated信号来响应托盘图标本身的用户活动。你读过文档吗? QSystemTrayIcon Class -
您在哪个桌面上看到这个,使用哪个 Qt 版本?例如,Unity 中的托盘图标支持在 5.5 之前被严重破坏
-
您的应用程序是否以 0 退出代码关闭?
-
@FrankOsterfeld Windows 7 和 Qt 5.4
-
@kefir500 我确实通过
exit(0)退出,因为我的应用程序应该在后台运行,并且当用户单击close按钮时,它会将其最小化到系统托盘。