将 GIcon 转换为 QIcon
convert GIcon to QIcon
有没有办法在这些数据类型之间进行转换?我正在使用 Qt,但仍然需要一些 glib 功能,但我还没有找到执行此操作的方法。我需要使用 GAppInfo 获取已安装应用程序的列表并将其显示在 QListView 中,为此我需要获取这些应用程序的图标。使用 g_app_info_get_icon returns 一个 GIcon 提取它,我需要使用一个 QIcon 来获得它的 QVariant。
GIcon does not provide the actual pixmap for the icon.
您需要通过请求特定大小的图标来加载实际的像素图。
#include <gio/gdesktopappinfo.h>
#include <gtk/gtk.h>
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QIcon icon;
GAppInfo *appInfo = (GAppInfo *)g_desktop_app_info_new("vlc.desktop");
GIcon *gicon = g_app_info_get_icon(appInfo);
QList<int> sizes; sizes << 16 << 24 << 32 << 48 << 64;
foreach (int size, sizes) {
GtkIconInfo *iconInfo = gtk_icon_theme_lookup_by_gicon(gtk_icon_theme_get_default(), gicon, size, (GtkIconLookupFlags)0);
GdkPixbuf *pixbuf = gtk_icon_info_load_icon(iconInfo, NULL);
if (pixbuf == NULL)
continue;
QImage image(
gdk_pixbuf_get_pixels(pixbuf),
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
gdk_pixbuf_get_rowstride(pixbuf),
QImage::Format_ARGB32);
g_object_unref(pixbuf);
image.save("icon-" + QString::number(size) + ".png");
icon.addPixmap(QPixmap::fromImage(image));
}
g_object_unref(gicon);
return 0;
}
有没有办法在这些数据类型之间进行转换?我正在使用 Qt,但仍然需要一些 glib 功能,但我还没有找到执行此操作的方法。我需要使用 GAppInfo 获取已安装应用程序的列表并将其显示在 QListView 中,为此我需要获取这些应用程序的图标。使用 g_app_info_get_icon returns 一个 GIcon 提取它,我需要使用一个 QIcon 来获得它的 QVariant。
GIcon does not provide the actual pixmap for the icon.
您需要通过请求特定大小的图标来加载实际的像素图。
#include <gio/gdesktopappinfo.h>
#include <gtk/gtk.h>
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QIcon icon;
GAppInfo *appInfo = (GAppInfo *)g_desktop_app_info_new("vlc.desktop");
GIcon *gicon = g_app_info_get_icon(appInfo);
QList<int> sizes; sizes << 16 << 24 << 32 << 48 << 64;
foreach (int size, sizes) {
GtkIconInfo *iconInfo = gtk_icon_theme_lookup_by_gicon(gtk_icon_theme_get_default(), gicon, size, (GtkIconLookupFlags)0);
GdkPixbuf *pixbuf = gtk_icon_info_load_icon(iconInfo, NULL);
if (pixbuf == NULL)
continue;
QImage image(
gdk_pixbuf_get_pixels(pixbuf),
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
gdk_pixbuf_get_rowstride(pixbuf),
QImage::Format_ARGB32);
g_object_unref(pixbuf);
image.save("icon-" + QString::number(size) + ".png");
icon.addPixmap(QPixmap::fromImage(image));
}
g_object_unref(gicon);
return 0;
}