此方法是在主窗口为QMainWindow的窗口中实现的方法,至于其它顶层的窗口没有经过测试。
实现的功能有创建一个托盘图标,在点击主窗口的关闭按钮后会弹出一个对话框,询问用户是最小化到系统托盘还是退出程序。如果用户选择最小化到系统托盘后并点击确定按钮,程序会最小化到系统托盘中。如果用户选择退出程序,程序会退出。如果用户点击的是对话框的取消按钮,不管用户之前是选择的最小化到系统托盘还是退出程序,点击取消按钮后除了关闭对话框外不做任何处理。同时在系统托盘中单双击系统托盘中的图标后会重新显示主窗口,点击右键会弹出一个右键菜单,菜单中有隐藏、最大化、正常、退出程序等选项。
为程序添加系统托盘需要用到QSystemTrayIcon类。可通过setIcon()函数设置按钮图标;通过setContextMenu()函数添加图标的右键菜单栏;setToolTip()函数可设置图标的提示信息(就是鼠标进入按钮区后出现在图标右上方的提示信息);调用show()函数可显示图标,注意,如果不调用show()函数的话是看不到图标的。
不过要想实现点击窗口关闭按钮后最小化到系统托盘中的话还需要重新实现MainWindow窗口的closeEvent(QCloseEvent *event)事件,并在main.cpp中添加如下一行代码:此处等待替换(此行代码的作用是在关闭最后一个可视窗口后不退出程序,这么做的代价就是以后要退出程序需要使用qApp.quit()函数,而并非MainWindow窗口的close()函数)。
下面的addSystemTray ()函数创建了一个托盘图标,并对托盘图标中的图片,右键菜单,提示信息进行了设置:
/*添加系统托盘*/
void MainWindow::addSystemTray()
{
this->createTrayIconMenu ();
systemTrayIcon = new QSystemTrayIcon(this);
systemTrayIcon->setContextMenu(systemTrayMenu);
systemTrayIcon->setToolTip(SYSTEM_NAME);
QIcon systemIcon(":/Icon/systemIcon.png");
systemTr