如何在纯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++ 中的程序?