【问题标题】:How to diplay system tray icon using Mono (Linux)?如何使用 Mono (Linux) 显示系统托盘图标?
【发布时间】:2014-12-27 18:24:03
【问题描述】:

我正在使用 GTK# 2.12,正如 here 所描述的那样。

但是当我使用具有透明度的 PNG 图像时,KDE 不想重绘图像的透明部分。所以,我在图像的透明部分看到了旧的位图(不是面板栏)。

我猜这可能是 GTK# 本身内部的错误。所以,我正在寻找一种使用单声道显示系统托盘图标的新方法。也许 QSystemTrayIcon 上的一些库可以做到这一点。理想情况下,它应该是跨平台的。所以,在 Windows 上,它也应该显示出来。

或者,我可以尝试为 Linux 版本实现平台调用(也许是最好的选择)。但是请给我一些例子……我是 Linux 中 Qt 和平台调用的新手。

【问题讨论】:

  • 你为什么不直接使用tray = new QSystemTrayIcon(this); tray->setIcon(QIcon(":/gui/logo.png")); /* ... */; tray->show();
  • 你知道 Mono, GTK# 是什么意思吗?我需要允许使用 C# 构建此应用程序的代码,而不是 C++。
  • 是的,大约 8 年前我在使用单声道,但你为什么需要单声道?我不是说你不这样做,而是我在寻求理由。
  • 是的,它是.Net应用程序。
  • Gtk 2.12 于十年前问世——令人惊讶的是它仍然适用于现代桌面。您是否考虑过移植到 Gtk 3?这个bug可能很久以前就解决了。

标签: c# qt mono gtk# system-tray


【解决方案1】:

我认为您应该尝试更新您的 gtk 版本,因为您尝试使用的版本非常旧。这就像使用 Qt 3 左右一样。十年前他们还好。对于这样的基本功能,很可能很久以前就修复了该错误。

如果你想坚持使用古老的软件,这里有一个 Qt 包装器解决方案,虽然只是为了应对它的挑战。

来自 KDE 的QYoto 不再需要太多维护,但它可能仍然是包装器中的最佳选择,因此这里是示例代码:

using Qyoto;

class Program { 
    public static void Main(string[] args) { 
        new QApplication(args); 
        var tray = new QSystemTrayIcon(this);
        tray.SetIcon(new QIcon(":/gui/logo.png"));
        ...
        tray.Show();
        QApplication.Exec(); 
  }   
} 

【讨论】:

  • 我在哪里可以获得 Mono 的 QSystemTrayIcon?
  • 在哪里可以下载?我了解如何使用 QSystemTrayIcon。我不知道如何使用它来获取程序集。
  • @Maxim:例如bitbucket.org/dzmuh/qyoto.examples/src/… 但老实说,你不应该使用 Qyoto,因为它没有维护。我写它只是为了挑战它可以完成。你应该找到一些 gtk# 或原生单声道方式。
  • SetIcon 在使用提供的 bitbucket URL 下载的库中不存在。它只有属性图标。所以没关系......但最终执行的应用程序找不到dll“qyoto-qtcore-native”,它在该存储库中不存在。 QtCore.SmokeInvocation ---> System.DllNotFoundException: qyoto-qtcore-native
  • @Maxim:给我写信时请突出显示我的昵称。我刚刚注意到这个...请尝试从这里下载它:download.kde.org/stable/4.14.3/src/qyoto-4.14.3.tar.xz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
相关资源
最近更新 更多