如何使用Mono(Linux)显示系统托盘图标?

3
我正在使用GTK# 2.12,如这里所述。
但是,当我使用带透明度的PNG图像时,KDE不想重新绘制图像的透明部分。因此,在图像的透明部分上看到旧位图(不是面板栏)。
我猜这可能是GTK#本身的错误。因此,我正在寻找一种新的方法来使用mono显示系统托盘图标。也许可以使用QSystemTrayIcon上的某个库来完成。理想情况下,它应该是跨平台的,因此在Windows上也应该显示。
或者,我可以尝试为Linux版本实现平台调用(可能是最佳选项)。但请给我一些示例...我对Qt和Linux中的平台调用很陌生。

为什么不直接使用 tray = new QSystemTrayIcon(this); tray->setIcon(QIcon(":/gui/logo.png")); /* ... */; tray->show(); 呢? - László Papp
你知道Mono和GTK#是什么吗?我需要使用C#来构建此应用程序的代码,而不是C++。 - Maxim
是的,这是一个.Net应用程序。 - Maxim
你尝试过qyoto、qtsharp或qt4dotnet吗?我认为这是一个关于Mono的问题,而不是Qt。 - László Papp
1
Gtk 2.12发布已有十年之久,令人惊讶的是它仍然能够与现代桌面环境兼容。您是否考虑过迁移到Gtk 3?这个bug可能早已被解决了。 - MrEricSir
显示剩余8条评论
1个回答

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? - Maxim
哪里可以下载它?我知道如何使用QSystemTrayIcon。但我不知道如何获取与它一起的程序集。 - Maxim
@Maxim:例如 https://bitbucket.org/dzmuh/qyoto.examples/src/1aebe51206d555dc2f27456509b688917ef74f3f/Lib/ ,但说实话,你不应该使用 Qyoto,因为它已经不再维护了。我只是为了挑战而编写了它。你应该找到一些 gtk# 或本地的 mono 方式。 - László Papp
使用提供的Bitbucket URL下载的库中缺少SetIcon。它只有属性Icon,所以没问题......但最终执行的应用程序找不到dll“qyoto-qtcore-native”,该存储库中也没有这个文件。QtCore.SmokeInvocation ---> System.DllNotFoundException: qyoto-qtcore-native。 - Maxim
@Maxim:在写信给我时,请突出我的昵称。我刚刚注意到这一点...请尝试从这里下载:http://download.kde.org/stable/4.14.3/src/qyoto-4.14.3.tar.xz - László Papp

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