将GIcon转换为QIcon

问题描述:

有没有办法在这些数据类型之间进行转换?我正在使用Qt,但仍需要一些glib功能,我还没有找到一种方法来做到这一点。我需要使用GAppInfo获取已安装应用程序的列表,并将其显示在QListView中,为此我需要获取这些应用程序的图标。使用g_app_info_get_icon提取它会返回一个GIcon,我需要使用的是一个QIcon来获取它的QVariant。将GIcon转换为QIcon

GIcon不提供图标的实际像素图。

您需要通过请求一定大小的图标来加载实际的像素图。

#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; 
}