zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt之QSystemTrayIcon

Qt
2023-09-11 14:19:13 时间

现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。


要检查系统托盘是否存在在用户的桌面上,调用QSystemTrayIcon::isSystemTrayAvailable()静态函数。

要添加系统托盘项,首先,需要创建一个QSystemTrayIcon对象,并调用setContextMenu()为图标提供上下文菜单,然后,调用show()使其在系统托盘中可见。状态通知消息(“气球消息”)可以在任何时候使用showMessage()来进行显示。

当用户激活托盘图标时,activated()信号会被发射。

只有在X11上时,当发出一个tooltip请求时,QSystemTrayIcon会接收一个QEvent::ToolTip类型的QHelpEvent事件。此外,QSystemTrayIcon会接收QEvent::Wheel类型的滚轮事件。这些都是不支持任何其它平台。


注意:系统托盘菜单并不对菜单有所有权,必须确保在恰当的时候删除菜单,例如:创造一个具有合适父对象的菜单。

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 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()为其添加需要的菜单项。


// 创建菜单项 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。


QSystemTrayIcon *pSystemTray = new QSystemTrayIcon(this); TrayMenu *pTrayMenu = new TrayMenu(this); // 设置系统托盘的上下文菜单 pSystemTray- setContextMenu(pTrayMenu); // 设置系统托盘提示信息、托盘图标 pSystemTray- setToolTip(QString::fromLocal8Bit("我就是托盘")); pSystemTray- setIcon(QIcon(":/icon/login")); // 连接信号槽 connect(pTrayMenu, SIGNAL(showWindow()), this, SLOT(showWindow())); connect(pSystemTray , SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onActivated(QSystemTrayIcon::ActivationReason))); // 显示系统托盘 pSystemTray- show(); // 显示系统托盘提示信息 pSystemTray- showMessage(QString::fromLocal8Bit("托盘标题"), QString::fromLocal8Bit("托盘显示内容")); // 显示窗体 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; }
该类提供了一个到 FTP 的直接接口,允许对请求有更多的控制。但是,对于新的应用程序,建议使用 QNetworkAccessManager 和 QNetworkReply,因为这些类拥有一个更简单、还更强大的 API。
QTimeLine 类提供了用于控制动画的时间轴,通常用于通过定期调用一个槽函数来动画一个 GUI 控件。 相信了解动画的人对帧应该不陌生,可以把一个动画想象成由很多张静态画面组成,而每一个画面就是一帧图像。每隔一定时间间隔就显示一帧图像,当该间隔较短时,人眼就感觉不出来了,觉得看到的是连续的影像。
QFuture 表示异步计算的结果,QFutureWatcher 则允许使用信号和槽监视 QFuture,也就是说,QFutureWatcher 是为 QFuture 而生的。
QFuture 允许线程与一个或多个结果同步,这些结果将在稍后的时间点准备就绪,该结果可以是具有默认构造函数和拷贝构造函数的任何类型。如果一个结果在调用 result()、resultAt() 或 results() 函数时不可用,QFutur
Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects。 一般来说,事件来自底层窗口系统(spontaneous() 返回 true),但也可以使用 QCoreApplication:
QLocalServer可以接受来自本地socket的连接。通过调用listen(),让server监听来自特定key的连接。 调用nextPendingConnection()来接受一个挂起(等待)的连接作为一个已连接的QLocalSocket。函数返一个QLocalSocket指针,可以被
虽然QLocalSocket是一个事件循环使用而设计,它也可以不被如此使用。这种情况下,必须使用 waitF