Qt之QSystemTrayIcon
来源:互联网 发布:程序员的头像 编辑:程序博客网 时间:2024/04/30 04:29
简述
QSystemTrayIcon类为应用程序在系统托盘中提供一个图标。
现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。
- 简述
- 内容
- 详细描述
- 共有类型
- 共有函数
- 公有槽函数
- 信号
- 静态共有函数
- 示例
- 效果
- 源码
内容
详细描述
要检查系统托盘是否存在在用户的桌面上,调用QSystemTrayIcon::isSystemTrayAvailable()静态函数。
要添加系统托盘项,首先,需要创建一个QSystemTrayIcon对象,并调用setContextMenu()为图标提供上下文菜单,然后,调用show()使其在系统托盘中可见。状态通知消息(“气球消息”)可以在任何时候使用showMessage()来进行显示。
当用户激活托盘图标时,activated()信号会被发射。
只有在X11上时,当发出一个tooltip请求时,QSystemTrayIcon会接收一个QEvent::ToolTip类型的QHelpEvent事件。此外,QSystemTrayIcon会接收QEvent::Wheel类型的滚轮事件。这些都是不支持任何其它平台。
共有类型
枚举QSystemTrayIcon::ActivationReason:
此枚举描述了系统托盘被激活的原因。
枚举QSystemTrayIcon::MessageIcon:
此枚举描述了显示气球消息时所显示的图标。
共有函数
QMenu * contextMenu() const
返回系统托盘的当前上下文菜单。void setContextMenu(QMenu * menu)
设置指定菜单为系统托盘的上下文菜单。当用户通过点击鼠标请求系统托盘的上下文菜单时,菜单会弹出。
在OS X中,一般转换为一个NSMenu,所以aboutToHide()信号不会发出。
注意:系统托盘菜单并不对菜单有所有权,必须确保在恰当的时候删除菜单,例如:创造一个具有合适父对象的菜单。
QRect QSystemTrayIcon::geometry() const
返回系统托盘图标在屏幕上的几何坐标。QIcon icon() const
void setIcon(const QIcon & icon)
icon : QIcon
这个属性保存了系统托盘的图标。在Windows中,系统任务栏图标的大小是16×16;X11中,首选大小为22x22。必要时该图标将被调整到合适大小。
void setToolTip(const QString & tip)
QString toolTip() const
toolTip : QString
这个属性保存了系统托盘的提示信息。在一些系统中,tooltip的长度是有限的,在必要时tooltip将被截断。
bool isVisible() const
返回系统托盘是否可见。
公有槽函数
void hide()
隐藏系统托盘。void setVisible(bool visible)
设置系统托盘是否可见。设置为true或调用show()使系统托盘图标可见;设置为false或调用hide()隐藏它。
void show()
显示系统托盘。void showMessage(const QString & title, const QString & message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000)
显示一个气球消息,使用所给出的标题、消息、图标和指定的时间,标题和消息必须是纯文本字符串。
消息可以被用户点击,当用户点击时发出messageClicked()信号 。
信号
void activated(QSystemTrayIcon::ActivationReason reason)
当用户激活系统托盘图标,这个信号被发射。reason指定激活的原因, QSystemTrayIcon::ActivationReason列举了各种原因。void messageClicked()
当使用showMessage()显示的消息被用户点击时,此信号被发射。目前,这个信号不会在OS X中发射。
静态共有函数
bool isSystemTrayAvailable() [static]
如果系统托盘可用,返回true;否则,返回false。如果系统盘是当前不可用,但以后变为可用,若QSystemTrayIcon可见,它就会自动在系统托盘中添加条目。
bool supportsMessages() [static]
如果系统托盘支持气球消息,则返回true;否则,返回false。
示例
效果
源码
首先,自定义系统托盘需要使用的上下文菜单TrayMenu,其继承自QMenu,并通过addAction()为其添加需要的菜单项。
#include <QMenu>class TrayMenu : public QMenu{ Q_OBJECTpublic: explicit TrayMenu(QWidget *parent = 0); ~TrayMenu();signals: // 自定义信号 void showWindow();private: // 添加菜单项 void initActions();private: QAction *m_pShowAction; QAction *m_pSettingAction; QAction *m_pHomePageAction; QAction *m_pHelpAction; QAction *m_pAboutAction; QAction *m_pUpgradeAction; QAction *m_pQuitAction;};
TrayMenu::TrayMenu(QWidget *parent) : QMenu(parent){}TrayMenu::~TrayMenu(){}// 添加菜单项void TrayMenu::initActions(){ // 创建菜单项 m_pShowAction = new QAction(QIcon(":/icon/open"), QString::fromLocal8Bit("显示"), this); m_pSettingAction = new QAction(QIcon(":/icon/setting"), QString::fromLocal8Bit("设置"), this); m_pHomePageAction = new QAction(QIcon(":/icon/home"), QString::fromLocal8Bit("登录网页"), this); m_pHelpAction= new QAction(QIcon(":/icon/help"), QString::fromLocal8Bit("帮助"), this); m_pAboutAction = new QAction(QIcon(":/icon/about"), QString::fromLocal8Bit("关于"), this); m_pUpgradeAction = new QAction(QIcon(":/icon/upgrade"), QString::fromLocal8Bit("检查更新"), this); m_pQuitAction = new QAction(QIcon(":/icon/quit"), QString::fromLocal8Bit("退出"), this); // 添加菜单项 addAction(m_pShowAction); addAction(m_pSettingAction); addAction(m_pHomePageAction); addSeparator(); addAction(m_pHelpAction); addAction(m_pAboutAction); addAction(m_pUpgradeAction); addSeparator(); addAction(m_pQuitAction); // 连接信号-信号(仅列举连接显示窗口的信号) connect(m_pShowAction, SIGNAL(triggered(bool)), this, SIGNAL(showWindow()));}
然后,创建系统托盘QSystemTrayIcon,并通过setContextMenu()为其设置自定义的上下文菜单TrayMenu。
MainWindow::MainWindow(QWidget *parent) : CustomWindow(parent){ // ...
QSystemTrayIcon <span class="hljs-subst">*</span>pSystemTray <span class="hljs-subst">=</span> <span class="hljs-literal">new</span> QSystemTrayIcon(this);TrayMenu <span class="hljs-subst">*</span>pTrayMenu <span class="hljs-subst">=</span> <span class="hljs-literal">new</span> TrayMenu(this);<span class="hljs-comment">// 设置系统托盘的上下文菜单</span>pSystemTray<span class="hljs-subst">-></span>setContextMenu(pTrayMenu);<span class="hljs-comment">// 设置系统托盘提示信息、托盘图标</span>pSystemTray<span class="hljs-subst">-></span>setToolTip(QString<span class="hljs-tag">::fromLocal8Bit</span>(<span class="hljs-string">"我就是托盘"</span>));pSystemTray<span class="hljs-subst">-></span>setIcon(QIcon(<span class="hljs-string">":/icon/login"</span>));<span class="hljs-comment">// 连接信号槽</span>connect(pTrayMenu, SIGNAL(showWindow()), this, SLOT(showWindow()));connect(pSystemTray , SIGNAL(activated(QSystemTrayIcon<span class="hljs-tag">::ActivationReason</span>)), this, SLOT(onActivated(QSystemTrayIcon<span class="hljs-tag">::ActivationReason</span>)));<span class="hljs-comment">// 显示系统托盘</span>pSystemTray<span class="hljs-subst">-></span>show();<span class="hljs-comment">// 显示系统托盘提示信息</span>pSystemTray<span class="hljs-subst">-></span>showMessage(QString<span class="hljs-tag">::fromLocal8Bit</span>(<span class="hljs-string">"托盘标题"</span>), QString<span class="hljs-tag">::fromLocal8Bit</span>(<span class="hljs-string">"托盘显示内容"</span>));
}
// 显示窗体
void MainWindow::showWindow()
{
showNormal();
raise();
activateWindow();
}
// 激活系统托盘
void MainWindow::onActivated(QSystemTrayIcon::ActivationReason reason)
{
switch(reason)
{
// 单击托盘显示窗口
case QSystemTrayIcon::Trigger:
{
showNormal();
raise();
activateWindow();
break;
}
// 双击
case QSystemTrayIcon::DoubleClick:
{
// …
break;
}
default:
break;
}
}
- Qt之QSystemTrayIcon
- Qt之QSystemTrayIcon
- Qt之系统托盘(QSystemTrayIcon详解)
- Qt之系统托盘(QSystemTrayIcon详解)
- Qt之系统托盘(QSystemTrayIcon详解)
- Qt浅谈之三十系统托盘(QSystemTrayIcon)
- Qt之系统托盘(QSystemTrayIcon详解)
- QT 托盘类QSystemTrayIcon
- QT中QSystemTrayIcon
- 窗体部件之QSystemTrayIcon
- QSystemTrayIcon
- QSystemTrayIcon
- 关于QT的QSystemTrayIcon的上下文菜单失去焦点仍然显示的问题
- QSystemTrayIcon类学习
- Two problems with QSystemTrayIcon
- QSystemTrayIcon 系统托盘使用总结
- QSystemTrayIcon menu无法消失问题
- QSystemTrayIcon增加系统托盘图标Demo
- 用flask开发个人博客(37)—— 使用Flask-pagedown实现博客文章预览的功能
- bzoj 4514: [Sdoi2016]数字配对 (二分+费用流)
- jq查询元素
- 学习springmvc时遇到的问题
- logging模块使用TCP/UDP发送纯日志内容
- Qt之QSystemTrayIcon
- Day 04-2 HttpServlet
- 实例说明jquery中html()、text()、val()方法的区别
- 跳表SkipList
- py脚本得到Python的版本
- UVALive 3516 Exploring Pyramids
- ElasticSearch5.0——中文分词插件IK安装
- 复化求积公式
- Ubuntu14.04 下安装PyCharm环境