Qt系统托盘图标的拖放

6

有人知道在使用Qt时是否可以通过托盘图标实现拖放吗?

2个回答

6

我做了一些研究,以下是我的结论:

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

  1. 您可以创建一个唯一颜色的图标,并将其作为图标显示片刻并截屏。
  2. 鉴于您知道图标的颜色序列,您可以搜索截屏并找到特定图标的位置。
  3. 透明小部件被放置在图标上方,并用作投放目标。

我还没有处理操作的一些细节,但这就是要点。考虑到没有其他方法可以完成这项工作,我认为这是可接受的,尽管它有些折衷。

Fluffy App(用C#编写)使用Spifftastic方法来定位托盘图标。我认为透明窗口的部分就是他们实现这一点的方式,但我还没有反编译和检查他们的系统。


1

由于QSystemTrayIcon是QObject而不是QWidget,我猜这是不可能的。系统托盘图标并不真正属于Qt - 它被传递给“桌面”,即绘制相关区域的Gnome/KDE/Windows/Mac的任何部分。至少在Mac上,您会将其放置在菜单栏上,这将是非常奇怪的用户界面。对于Gnome和KDE来说,这是FreeDesktop.org标准,但同样我认为它并不是您的进程实际进行绘制,因此Qt无法获取拖放等事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接