使用QT创建系统托盘
来源:互联网 发布:北京软件外包 编辑:程序博客网 时间:2024/05/17 15:40
使用QT来创建一个系统托盘,事实上是一件很简单的事。为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一。但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比较详细的例子,但由于功能较多,所以看起来比较费劲。我们在这只是抽丝剥茧,只实现系统托盘这一个功能。
首先,使用QT creator创建一个GUI工程,继承于QDialog还是QMainWindow还是QWidget都无所谓。我们以继承QMainWindow为例说明。创建完毕之后,creator将自动生成一些文件,工程文件如下:
打开头文件mainwindow.h。在类声明中添加一些必要的成员变量,如下图所示:
其中:closeEvent()是父类中的一个虚函数。我们在这里将它重写来,以实现程序窗口关闭时的一些动作。然后后声明了一个QSystemTrayIcon类型的指针,这是实现系统托盘的一个主要类。然后声明了四个QAction类型的指针,以及一个QMenu类型的指针,它们将合作实现系统托盘的上下文菜单。好了,我们仅仅只是实现系统托盘的功能,所以添加这些成员就已经足够了。
一般,我们会看到系统托盘处都有一个小图标代表程序处于后台运行。那么,我们也添加一个小图标来作为我们程序的系统托盘图标。这一步很简单:先在源代码的文件夹中建立一个子文件夹,比如命名为images.然后在工程中添加一个资源文件。打开这个资源文件,在右边下部可以看到一个添加的按钮,点击添加前缀,如图:
添加前缀的时候要注意,默认生成的前缀是:/new/prefix1,我们把后面的文字都去掉,只保留'/'。这是为了简便处理。之后,再次点击“添加”按钮,这次选择“添加文件”。在打开的文件对话框中,我们选择先前建立的images文件夹中的一个图标,点击确定后结果如图:
添加图标的过程到此结束。
下面就转到mainwindow.cpp文件来进行实际代码的编写。一般和窗口组件初始化的代码,我们都放到主窗口的构造函数中,以便窗口在创建时就将必要的组件初始化好。这里我们就在MainWindow类中进行实现。看代码:
1 QIcon icon(":/images/sysTray.ico"); 2 systemTray = new QSystemTrayIcon(this); 3 systemTray->setIcon(icon); 4 systemTray->setToolTip("Test Radio Buttons"); 5 minimumAct = new QAction("Minimum Window", this); 6 //Note the differences between hide() and showMinimized(). 7 connect(minimumAct, SIGNAL(triggered()), this, SLOT(hide())); 8 maximumAct = new QAction("Maximum Window", this); 9 connect(maximumAct, SIGNAL(triggered()), this, SLOT(showMaximized()));10 restoreAct = new QAction("Restore Window", this);11 connect(restoreAct, SIGNAL(triggered()), this, SLOT(showNormal()));12 quitAct = new QAction("Quit Application", this);13 connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit()));14 pContextMenu = new QMenu(this);15 pContextMenu->addAction(minimumAct);16 pContextMenu->addAction(maximumAct);17 pContextMenu->addAction(restoreAct);18 pContextMenu->addSeparator();19 pContextMenu->addAction(quitAct);20 systemTray->setContextMenu(pContextMenu);21 systemTray->show();
我们逐行进行讲解:第1行使用图标的文件路径生成一个QIcon对象,这是给QSystemTrayIcon的setIcon用的,用来设置系统托盘图标。第4行设置提示信息。这个提示信息出现在什么时候呢?就是当你的鼠标放在系统托盘图标上时,它就会出现。一般设置为程序名称。第5行到第13行设置上下文菜单项。这里总共设置了四项。分别为缩小、放大、还原窗口和推出程序。每一个菜单项在创建后,我们就将其触发信号连接到指定的槽函数。第14到20行将创建好的菜单项添加到上下文菜单中去,搞定。第21行将这个系统托盘显示出来。这一句很重要,不能忘记。否则在系统托盘区将看不到图标。
这时功能基本完成,程序在一启动时就可以在系统托盘区看到托盘图标。但是如果在上述构造函数中没有加showMessage()这个函数,将不会出现托盘气球提醒。我们就模仿程序后台运行时的提醒效果吧。那么,我们只需重写closeEvent()事件即可。如下编写代码:
if
(systemTray->isVisible())
{
hide();
systemTray->showMessage(
"Tips"
,
"The program is running behind!"
);
event->ignore();
}
if语句首先对托盘可见性进行判断。由于我们在构造函数中已经调用了show()函数,所以此时系统托盘图标是可见的。于是进入if语句。首先将主窗口进行隐藏,然后调用QSystemTrayIcon的showMessage()函数显式托盘气球提醒。最后调用ignore()函数忽略事件,以防止该事件继续传递。效果如下图:
功能完成,再看看上下文菜单的样子:
至此,简单的系统托盘功能完成。
转载自:http://www.cnblogs.com/csuftzzk/archive/2013/01/25/2877283.html
- 使用QT创建系统托盘
- 使用QT创建系统托盘
- 使用QT创建系统托盘
- 创建QT系统托盘图标
- Qt系统托盘
- Qt 系统托盘
- Qt 系统托盘
- QT 系统托盘图标
- QT 系统托盘图标
- Qt 添加系统托盘
- Qt系统托盘程序
- QT 系统托盘图标
- Qt实现系统托盘
- qt之系统托盘
- QT 系统托盘图标
- Qt添加系统托盘
- Qt模仿360系统托盘
- Qt之设置系统托盘
- 怎样写linux下的USB设备驱动程序
- IOS常用开源项目收藏之二
- Extjs4.0+HSSFWorkbook+SpringMVC实现将数据库中的记录导出到本地Excel格式
- The method of type must override a superclass method解决方式
- android Qemu GPS 模块简明分析
- 使用QT创建系统托盘
- cgpdfpageref转uiimage
- Http请求封装基类HttpHelper.cs
- Android OpenGL ES 简明开发教程七:材质渲染
- 【cocos2dx 3.2】一个都不能死7 游戏结束场景
- 微动力WQ_V3.1020UTF商业版程序,10月最新版完全免费下载
- c++ 显式类型转换static_cast, dynamic_cast, const_cast
- JAVA 根据设置的概率生成随机数
- 水仙花数