从 Qt 资源文件加载 ico 时出现问题

Posted

技术标签:

【中文标题】从 Qt 资源文件加载 ico 时出现问题【英文标题】:Issue when loading an ico from a Qt resource file 【发布时间】:2013-01-22 10:42:36 【问题描述】:

我使用的是 Qt Designer 4.8.4,我在 QMainWindow 资源文件中包含两个文件:一个 .ico 文件和一个 .gif 文件。从代码加载时使用:

QPixmap p;
p.load(":/MyApp/media/logo.gif");  // does work
p.load(":/MyApp/media/logo.ico");  // does not work

gif 文件有效,但 ico 文件无效。 有什么原因吗?我使用ico文件作为窗口图标,运行应用程序时没有显示。

而且,是的,我正在成功编译 qrc 文件,因为 GIF 文件正在工作

干杯,

【问题讨论】:

【参考方案1】:

*.ico 不受支持。

Qt默认支持以下格式:

格式说明 Qt 的支持

BMP Windows 位图读取/写入

GIF 图形交换格式(可选)阅读

JPG 联合摄影专家组读/写

JPEG 联合图像专家组读/写

PNG 便携式网络图形读/写

PBM 便携式位图读取

PGM 便携式灰度图读取

PPM 便携式像素图读/写

TIFF 标记图像文件格式读/写

XBM X11 位图读取/写入

XPM X11 像素图读/写

【讨论】:

感谢四位您的回复。问题是 Qt Designer 让我将图标文件添加到资源文件中,然后 Qt Designer 预览器将图标显示为窗口图标。这很令人困惑。谢谢, 请注意,此信息现在具有误导性。 Qt从4.4版本开始可以打开ico文件;从 5.4 版开始,该列表还包括 tgaddswebpjpeg2000mng 和其他(可在 qtimageformats 存储库中找到)。【参考方案2】:

因为 QPixmap 不能简单地读取 .ico 文件, 如果您想了解有关支持的格式的更多信息,请查看文档 QPixmap

【讨论】:

链接已失效。内容移至:qt-project.org/doc/qt-5.0/qtgui/qpixmap.html【参考方案3】:

这里接受的答案不正确,或者如 cmets 中所述,至少具有误导性。 Qt 从 4.4 版开始就带有一个用于处理 ICO 格式的插件。这是同一时代的similar question。

对于部署,需要将用于构建的 Qt 安装中的 plugins/imageformats/[lib]qico.[dll|so] 文件复制到其可执行文件的目录中。将其放在子文件夹中,如下所示:<your_executable>/imageformats/qico.dll。如果测试调试版本,则需要 d 后缀版本的 lib (qicod.dll)。

(This newer question 已被标记为与此重复,所以现在有 2 个问题指向错误的答案。这就是我在这里重复我的帖子的原因。)

【讨论】:

【参考方案4】:

您可以将其格式转换为 Qt 支持的格式。

【讨论】:

【参考方案5】:

从您对已经选择的答案的跟进中猜测,您可能希望将该 ICO 作为应用程序窗口图标。这是可能的,也可能是 Qt Designer 能够显示它的原因(试图猜测您的意图)。但是,拥有它并不涉及任何 QPixmap 编码,它纯粹是配置事务。在这里描述(是的,#worksforme):

http://doc.qt.digia.com/qt/appicon.html

【讨论】:

这也可以在:qt-project.org/doc/qt-5.0/qtdoc/appicon.html:‌[

以上是关于从 Qt 资源文件加载 ico 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

将图像从项目资源复制到Objective-C中的文档文件夹时出现问题

QT修改mainwindow前的图标,在资源管理器上显示图标也改变

从 ServletContext 资源解析 XML 文档时出现意外异常

使用 UIWebView 加载静态资源时出现随机错误

QML 中的全局图像资源

Qt中,怎么修改生成的EXE文件的图标和名字