4

我有一个图像文件,如C:/44637landscapes-2007.jpg

我想QPixmap使用 PySide加载这个文件

我尝试如下。

pixmap = QPixmap('C:/44637landscapes-2007.jpg')

但是文档说就像QPixmap(':/xxxxxx.jpeg'). 是什么':'意思?

如何加载图像'C:\'

编辑: 问题在于尝试加载"JPEG"。它能够加载"PNG",没有问题。那么,我还需要做什么才能加载"JPEG"

谢谢吉乔伊

4

3 回答 3

5

Qt 对图像做了一些奇怪的事情。如果您只使用 pngs,您将永远不会遇到问题。其他图像格式的处理方式略有不同。

如果您查看 Qt 目录(所有二进制文件和源代码都在其中),您会发现一个名为: plugins\imageformats

在该目录中,Qt 支持的每种图像格式都有大量dlls(或)一个。.so就您而言,我认为您感兴趣的是qjpeg4.dll

现在,当您运行应用程序并尝试使用 ajpeg时,Qt 将尝试加载此插件,但如果找不到,则您的图像将不会显示。

我们对 ico 文件也有类似的问题。它在我们的开发环境中工作,因为 Qt 文件夹在我们的PATH,,因此它神奇地找到了这个插件。但是,当我们发布我们的软件时,我们只会分发我们需要的那些 dll,因此它不起作用。

经过大量调查,这就是我们所做的:

  • 我们的应用程序位于 bin/ 目录中。这是放置 exe 和所有 Qt dll 的地方。 QtCore4.dll等等QtGui4.dll……

  • 在 bin 目录下,我们创建一个名为'imageformats'

  • Putqjpeg4.dll和您可能需要的任何其他图像插件。

  • 更改代码如下:

    QApplication _App(argc, argv);

    // Find the path of your bin directory - whereever your exe resides.

    QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");

    // This line is providing a path to Qt telling it to look here for plugins QApplication::addLibraryPath(_Path);

    // Initialize the main form

    return _App.exec();

    这应该确保 Qt 知道jpeg处理插件,并将您的图像加载到UI.

于 2011-05-11T21:19:32.853 回答
4

您可以通过提供文件的路径名来构造 QPixMap 的实例。尝试代码时遇到什么错误?将您的代码更改为:

pixmap = QPixMap(r'C:\filename.jpeg')

您所指的文档是您加载 Qt 资源的方式。可以将应用程序需要的图像转换为 Qt 资源,以便以独立于平台的方式加载它。有关执行此操作的步骤,请参阅 Qt 资源系统 文档。

于 2011-05-10T16:59:49.940 回答
3

如果您尝试将 Python 代码构建为可执行文件,这涵盖了 .ico 文件的问题,但 JPEG 的过程是相同的: PyQt/PySide - 图标显示

如果您在从已安装的解释器运行时遇到问题,那么您的路径变量可能设置不正确,您的 qt.conf(在基本 python 目录中)已被删除/更改,或者您没有 qjpeg4.dll应该是(<python dir>\Lib\site-packages\PySide\plugins\imageformats)。

我的 qt.conf 看起来像:

[Paths]
Prefix = C:/Python27/lib/site-packages/PySide
Binaries = .
Plugins = plugins
Translation = translation

C:/Python27/lib/site-packages/PySide是我的系统 PATH 变量的一部分,位于任何 PyQt(或其他 Qt)目录之前

于 2011-05-12T02:24:55.380 回答