Visual Studio中Qt5插件在发布版上无法工作。

4
我正在进行一个项目,使用qt5界面展示图片,我只是通过设置标签的QImage Pixmap来实现。
问题在于,在调试构建中可以正常工作,但在发布版本中却不能正常工作,我不明白为什么。
我已经在我的".Exe"文件夹中创建了一个名为"plugins"的文件夹,以及其中一个名为"imageformats"的子文件夹,在该文件夹中有一个名为"qjpeg.dll"的文件。
所以我来这里看看是否有人知道为什么它不起作用?
提前感谢!

我首先会使用像“Walker Dependency”这样的工具检查您项目中涉及的各个exe和dll的C运行时依赖关系(调试/发布和静态/动态)。 - lolando
1个回答

3
我假设您是在Qt Creator中开发应用程序,并且没有使用.qrc文件。
这是Qt期望的文件夹结构(如果您从Qt Creator启动应用程序,则为左侧;如果您通过双击其图标启动应用程序,则为右侧):
[Dev]\pic.jpg                        =>  [App]\pic.jpg
[Dev]\release\app.exe                =>  [App]\app.exe
[Qt]\bin\*.dll                       =>  [App]\*.dll
[Qt]\plugins\platforms\qwindows.dll  =>  [App]\platforms\qwindows.dll
[Qt]\plugins\imageformats\qjpeg.dll  =>  [App]\imageformats\qjpeg.dll
---------------------------------------------------------------------
    [Qt]  = Folder where you installed Qt
    [Dev] = Folder where you built your app
    [App] = Folder where you want to deploy your app

两个常见错误:

  • 如果您从Qt Creator启动,请确保您的图片文件在[Dev]中(不同的文件夹用于调试和发布模式)
  • 如果您通过双击启动,请删除"plugins"文件夹

谢谢,我是从Visual Studio启动的...但我在网上看到需要“插件”文件夹,但删除此文件夹就可以了 :) - John Smith
1
奇怪的是,我有一个类似的问题,但这个解决方案并没有起作用。当部署到非开发机器时,我的程序可以运行,但无法加载jpg图像。QImageReader::supportedImageFormats();不列出jpg。即使我按照您所描述的将完整的imageformats文件夹(其中包含qjpeg)复制到我的应用程序路径中,它也不起作用。我发现了一个提示,关于在我的项目文件中添加QTPLUGIN += qjpeg,但它没有任何区别。我正在使用Qt 5.5和Qt Creator。 - vsz
使用 windeployqt.exe 解决了我的问题,通过将其他几个 DLL 复制到我的应用程序目录中,因此似乎仅使用 imageformats 是不够的。 - vsz
1
@vsz:出于好奇,您还需要哪些其他DLL文件?此外,这篇文章可能会对您有所帮助:http://wiki.qt.io/Deploy_an_Application_on_Windows - JKSH
我也在使用 windeployqt,它根据此答案中给出的细节创建文件夹和导入 dlls。尽管如此,我和其他人一样仍然存在同样的问题:似乎没有使用 imageformats 中的 dlls。或者可能由于其他缺失的 dlls 无法加载。我可以在自己的机器上重现这个问题:如果我从 QtCreator 启动,则 jpeg 能够加载,但是如果我自己启动程序则不能。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接