如何在纯c++环境中使用qt中的图像?

Posted

技术标签:

【中文标题】如何在纯c++环境中使用qt中的图像?【英文标题】:How can I use image in qt with pure c++ environment? 【发布时间】:2020-05-14 09:06:16 【问题描述】:

我正在编写一个没有 QT IDE(在 clion 中)的 GUI。我想在我的 GUI 中使用图像(QICON)。我做了一些研究,QT 官方网站告诉我“资源系统基于紧密合作在 qmake、rcc(Qt 的资源编译器)和 QFile 之间。”。我不想使用 qmake、.qrc 文件。

我可以使用绝对路径或 QIcon(QDir::currentPath()。但是当我更改工作路径时,此方法工作不正确(图形未显示在 GUI 中)。

那么,如何在没有 qmake,.qrc 的情况下正确使用图像文件?

【问题讨论】:

【参考方案1】:

如果您不想处理 Qt 资源系统,您可以将图像转换为 XPM format,这是图像的文本表示,并将其嵌入到您的源代码中.有很多在线转换器可供您使用。

例如,您可以将转换后的图像存储为源代码中的static char *数组,并在GUI中使用,如下:

/* An image in XPM */
static char *imageTxt[] = 
    /* columns rows colors chars-per-pixel */
    "300 292 64 1 ",
    "  c black",
    etc.
[..]

QLabel l;
l.setPixmap( QPixmap(imageTxt) );
l.show();

基本上,这就是 Qt 的资源系统自动执行的操作。

【讨论】:

XPM 是一种选择,但(对于较大的图像)也可以使用更紧凑的格式。我曾经在对SO: Qt C++ Displaying images outside the GUI thread (Boost thread) 的回答中使用GIMPs 选项进行RGB C 源图像转储。对于QImage::loadFromData(),也可以使用任何受支持格式的转储。 要从二进制文件中生成源代码,一个简单的(自写)工具可以提供帮助:SO: How to include data object files (images, etc.) in program and access the symbols?【参考方案2】:

鉴于您没有通过 Qt 资源系统分发有问题的图像(例如,将图像打包到应用程序二进制文件中),我假设您将图像与应用程序二进制文件。

在这种情况下,QCoreApplication::applicationDirPath() 很可能满足您的需求。

【讨论】:

【参考方案3】:

正如其他答案所说,有一些方法可以在不使用 Qt 资源系统的情况下做到这一点。然而,还有一种方法可以将 Qt 资源系统与 CMake 以及扩展 CLion 一起使用。

CMake 有一个名为AUTORCC 的option,您可以像AUTOMOC 一样打开它,它会正确处理您的.qrc 文件。如果您选择 CMake 选项,这实际上是 QtCreator 使用的。

您所要做的就是打开AUTORCC 并将您的 qrc 文件添加到您的源中,例如:

set(AUTORCC ON)
...
add_target(my_target my_qrc_file.qrc ...)

然后您可以正常访问资源系统中的内容(例如,您的图像的路径为:/my_image)。

【讨论】:

【参考方案4】:

使用相对路径。 确保图像文件与您的程序位于同一目录中,或者图像文件位于程序目录的子目录中。

【讨论】:

以上是关于如何在纯c++环境中使用qt中的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在纯 C++ 中高效快速地清理我的 GDI 对象 - winapi(不是 .net,c#)?

如何使用 Visual C++ 2010 Express 从 32 位环境为 64 位 Windows 编译 Qt?

如何在 Android 上重新启动 Qt 或 c++ 中的程序?

如何在文件夹opencv&&qt c++中加载图像[关闭]

一旦 Qt 已经在一个项目上工作,如何在 Visual Studio 中的另一个项目上使用它

GraphicsScene 中的 Qt GLWidget 用于从图像数据(C++、Windows)中快速显示视频?