共计 3172 个字符,预计需要花费 8 分钟才能阅读完成。
一、利用场景
在零碎应用的过程中,有些利用须要长时间运行在桌面环境中,例如网络、声音、麒麟天气、电源电池、输入法、QQ、微信等,为了让用户随时拜访这些程序以及理解它们的状态,任务栏除了须要疾速启动图标外还须要提供一个特定的音讯告诉区域,即系统托盘区域,用于向用户发送音讯、正告和提醒,用户能够通过托盘图标疾速的拜访这些利用,也能够通过托盘图标的状态来理解程序运行的状态。
二、简介
任务栏(ukui-panel)会提供一个非凡区域,称为系统托盘或告诉区域,长时间运行的应用程序能够在其中显示图标状态和短消息,也就是右侧输入法、声音、网络等组件的区域。
图 1 任务栏托盘图标区域
在 Linux 操作系统中,“系统托盘区域”是在给定的 X 屏幕上运行的应用程序,能够显示正在运行的应用程序提供的小图标。系统托盘是一个 X 客户端,在给定的屏幕上领有一个非凡的管理器抉择并提供了容器窗口。Windows 将此性能称为“告诉区域”。本文应用标准名称为“系统托盘”。
从 UI 的角度来看,系统托盘通常用于:
● 批示某些非凡状态的瞬态图标,例如网络,麒麟天气等;
● 一些功能强大的利用的托盘图标会实现更过丰盛的性能。例如,qq 托盘图标能够以通知用户他们有新传入的即时消息或相似内容。音讯告诉的根本思维是:在告诉区域中创立图标比弹出对话框要更少地烦扰用户。然而也不能让用户齐全疏忽这些音讯,因而托盘区域增加了这项性能,该性能容许任务栏托盘图标弹出音讯告诉。
三、什么利用须要创立托盘图标
理解这些的根底上,咱们能够思考什么状况下利用须要创立托盘图标。
● 用户想要通过任务栏上某些利用的图标状态能够分明的理解该程序的运行状态,例如以后应用的输入法,网络是否连贯,声音大小等。
图 2 托盘图标能够看到网络连接与断开
● 某些后盾过程,须要一个点击事件将其主界面迅速关上,例如麒麟影音(kylin-video)。
● 某些利用的设置,须要简洁高效。任务栏属于常驻利用,托盘图标的点击等能够很不便地实现相干设置。例如蓝牙的设置能够通过托盘区域图标右键来进行连贯,断开等操作。控制面板中尽管同样能够实现此性能,然而用户通过关上控制面板进行连贯带来的用户体验是不佳的。
● 某些利用须要托盘图标来承受音讯告诉。咱们应该更好的利用托盘区域的音讯告诉,相比弹出框,这个区域的音讯告诉并不会给用户造成太大的视觉烦扰,然而可起到和音讯弹出框一样的成果。如果有利用频繁发送音讯,那么以弹出框的模式来展现这些音讯可能并不合理,这可能会给用户的其余操作带来微小影响。所以咱们应该给用户抉择的空间,是否应用托盘区域来承受音讯告诉。实际上微信等聊天程序就是这么解决的,他们并不会弹出提示框,仅仅是通过托盘图标的闪动以及通过托盘图标的悬浮显示音讯内容。
四、托盘利用创立规范
目前用户越来越难以与以后托盘区域进行交互。每个应用程序的行为各不相同(从外观咱们无奈判断一个托盘利用的性能是通过右键菜单项还是点击事件来实现),甚至有时它们的款式也不同。而托盘插件无奈对立或扭转这些托盘利用的行为和款式,因而应用较为对立的规范进行托盘利用的开发是有必要的。
● 目前 Linux 社区比拟认可的托盘利用行为和款式是:图标用以显示状态,右键菜单显示性能。(甚至 gnome 为了对立这部分区域,采纳了较为极其的形式:勾销托盘利用的显示性能,仅保留零碎利用的几个图标用以显示状态。)
● 托盘利用的性能应尽量抉择右键菜单来实现(或左右键点击触发雷同的界面),如果托盘利用的次要性能由主界面实现,那么也至多应该在右键菜单中蕴含罕用性能。这样能最大限度的放弃与社区托盘利用雷同的交互逻辑。
● 在须要弹出主界面窗口的地位紧贴任务栏的状况下,应尽量应用 Qt 接口获取可用工作区的尺寸来使主界面正确的显示在可用工作区相应地位。
● 托盘图标的启动和须要弹出的主窗口界面的启动须要拆散开来,即在任务栏启动过程中只需加载托盘上的图标,当用户在应用过程中点击了该图标,才须要去加载弹出主窗口,因而第一次加载会有一些慢,但这是在能够承受的范畴内。
● 上述解决无奈满足非凡设计需要的状况下,(例如 ukui-sidebar 的侧边弹出性能,) 能够通过 dbus 接口获取任务栏的高度、地位来优化相干界面,但必须做好没有任务栏的状况下的异样解决。(托盘利用的弹出界面应尽量避免与任务栏交互,这样会造成以后利用在其余桌面环境下弹出界面异样的问题)。
如果确定了本人所开发的应用程序须要在托盘区域提供一个图标用于显示状态或音讯提醒,就要用到 QSystemTrayIcon 这个类。
五、应用 QSystemTrayIcon 在麒麟零碎上创立托盘图标
- 罕用函数介绍
● void setContextMenu(QMenu * menu)
给托盘图标设置性能菜单。当用户通过点击鼠标申请系统托盘的上下文菜单时,菜单会弹出,如不须要也能够不设置此菜单。
● void setIcon(const QIcon & icon)
设置图标。QIcon 这个属性保留了系统托盘的图标。托盘图标理当由系统托盘调配任何尺寸,并且应尽最大致力无效地应答任何尺寸。因而应首先思考获取主题图标,托盘插件会依据用户的调节从新绘制图标的大小。
● void setVisible(bool visible)
设置系统托盘是否可见。一般来说咱们心愿系统托盘图标是可见的。设置为 true(或调用 show())使系统托盘图标可见;设置为 false(或调用 hide())使图标暗藏。
● void showMessage(const QString & title, const QString & message, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int millisecondsTimeoutHint = 10000)
显示一个告诉音讯,应用所给出的题目、音讯、图标和指定的工夫,题目和音讯必须是纯文本字符串。
音讯能够被用户点击,当用户点击时收回 messageClicked() 信号。
托盘图标可能会要求系统托盘向用户显示告诉音讯。系统托盘会协调告诉音讯,以确保它们具备统一的外观,并防止一次显示多个告诉音讯
● void activated(QSystemTrayIcon::ActivationReason reason)
当用户激活系统托盘图标,这个信号被发射。reason 指定激活的起因。
● void messageClicked()
当应用 showMessage() 显示的音讯被用户点击时,此信号被发射。
● bool isSystemTrayAvailable() [static]
如果系统托盘可用,返回 true;否则,返回 false。
如果系统托盘区域是以后不可用,但当前变为可用的时候且 QSystemTrayIcon 可见的状况下,它就会主动在系统托盘中增加。
在托盘应用程序启动的入口先调用 isSystemTrayAvailable()动态函数来检测是否以后零碎存在可利用托盘利用显示的区域,否则可能会造成托盘利用启动早于任务栏,任务栏启动后无奈显示托盘图标的问题
- 用 Qt 注册托盘图标的步骤详解
(1)首先创立一个 Qt 我的项目,命名为“traytest”,基类抉择 QWidget;
(2)在 traytest.cpp 中引入头文件“#include”;
(3)在构造函数中 new 一个 QSystemTrayIcon 的成员变量;
(4)给变量设置图标,如果主题库中有这个图标就从主题库中间接获取,主题库没有的状况下能够加载一张图片;
(5)调用 show() 函数显示该图标。
这样,就实现了任务栏托盘图标的显示,上面以火狐(Firefox)图标为例,提供一个 Demo。
运行后果如下:
END
以上就是无关自定义任务栏的内容分享,欢送大家提出本人的倡议或分享你胜利创立的任务栏图标哦!