2015-03-31 2 views
0

Есть ли способ конвертировать между этими типами данных? Я работаю с Qt, но все еще нуждаюсь в некоторых возможностях glib, и я не нашел способ сделать это. Мне нужно получить список установленных приложений с GAppInfo и показать его в QListView, и для этого мне нужно получить значок для этих приложений. Извлечение его с помощью g_app_info_get_icon возвращает GIcon, и мне нужно работать с QIcon, чтобы получить QVariant.конвертировать GIcon в QIcon

ответ

0

GIcon не предоставляет фактическую pixmap для значка.

Для того, чтобы загрузить картинку по нужному запросу, необходимо загрузить изображение определенного размера.

#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; 
} 
Смежные вопросы