Qt托盘图标拖放

Posted

技术标签:

【中文标题】Qt托盘图标拖放【英文标题】:Qt Tray Icon Drag and Drop 【发布时间】:2011-04-30 00:11:23 【问题描述】:

有谁知道是否可以使用 Qt 拖放托盘图标?

【问题讨论】:

【参考方案1】:

我一直在做一些研究,这是我想出的:

QSystemTrayIcon 无法显式处理拖放事件。但是,有一个基于 Spifftastic 托盘图标定位方法的解决方法。

    您创建了一个颜色独特的图标 并将其放置为简短的图标 拍一张截图。 鉴于您知道颜色 图标的顺序,你可以 搜索屏幕截图和 找到特定图标的 位置。 放置了一个透明小部件 在图标上方并用作 放下目标。

我还没有处理一些更精细的操作细节,但这就是它的要点。所有事情都认为这是一种 hacky 方式,但鉴于没有其他方法可以做到这一点,我认为这是可以接受的。

Fluffy App(用 C# 编写)使用 Spifftastic 方法来定位托盘图标。我假设关于透明窗口的部分是他们如何实现的,但我还没有反编译和检查他们的系统。

【讨论】:

【参考方案2】:

由于 QSystemTrayIcon 是 QObject,而不是 QWidget,我猜这是不可能的。系统托盘图标并不真正归 Qt 所有 - 它被传递到“桌面”,即 Gnome/KDE/Windows/Mac 的任何部分正在绘制相关区域。至少在 Mac 上,您会掉到菜单栏上,这将是一个非常奇怪的 UI。对于 Gnome 和 KDE,它是 FreeDesktop.org 的标准,但我不认为它实际上是由您的进程来执行绘图的,因此 Qt 无法获取诸如拖放之类的事件。

【讨论】:

以上是关于Qt托盘图标拖放的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 托盘中拖放 NotifyIcon

OSX 上的 QT:托盘图标 - 图标 Dock 问题

Qt5 (Linux/LXDE) 中不显示系统托盘图标

应用程序停止后Qt关闭托盘图标

centos7.9下Qt 实现系统托盘,托盘菜单,托盘消息

没有小部件的系统托盘图标