如何防止 Qt/cmake 向窗口上的资源添加回车符



我有一个在Linux上开发的Qt程序。其中有一些从配置文件解析的用户设置。当然,用户在第一次启动时往往不会拥有该配置文件,我们希望即使它不存在也能正常工作,因此明智的默认值的副本存储在资源文本文件中,该文件的格式与磁盘版本相同。

我在窗口上运行时遇到了烦恼......

资源"n"行尾都转换为沿线某处"rn"!我真的不希望更改解析器来选择性地接受多种类型的换行符。

有没有办法告诉cmake告诉Qt资源编译器不要通过传递标志或类似的东西进行转换?

编辑:为了澄清发生了什么,我将解释为什么我认为 qrc 添加换行符的所有小细节......

首先,我有一个 .qrc 文件,大致如下所示:

<RCC>
<qresource prefix="/">
<file>res/DefaultSettings.txt</file>
</qresource>
</RCC>

它使用如下代码通过 cmake 添加到可执行文件中:

qt5_add_resources(QRC_SOURCES
resource.qrc
)

add_executable(my_project
resource.qrc
main.cpp
)

最后,它加载了如下代码:

QByteArray loadResource(const QString &resource) {
QResource res(resource);
if(!res.isValid()) {
qFatal("Failed to load internal resource");
}
// don't copy the data, if it's uncompressed, we can deal with it in place
auto defaults = QByteArray::fromRawData(reinterpret_cast<const char *>(res.data()), res.size());
if(res.isCompressed()) {
defaults = qUncompress(defaults);
}
// NOTE: at this point, using a debugger, I observe 
// "rn" newlines in the defaults byte array 
return defaults;
}

如果您所说的"资源"文本文件是指通过 qrc 存储在可执行文件中的二进制资源,那么不:qrc 永远不会更改文件 - 它不区分二进制和文本资源,就其而言,它都是二进制的。不过,git 等版本控制系统可能会在签入/签出时执行此操作。您还可以使用转换行尾的 API 读取文件。理想情况下,您希望有一个输出文件的复制器,然后是另一个使用 qrc 嵌入文件的复制器,然后演示更改的行尾。

最新更新