首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GIcon转换为QIcon

将GIcon转换为QIcon
EN

Stack Overflow用户
提问于 2015-03-31 04:43:58
回答 1查看 131关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-31 08:56:58

GIcon没有为图标提供实际的像素映射。

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

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29360763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档