我有一个在Linux上开发的Qt程序。其中是一些从配置文件解析的用户设置。当然,用户在首次启动时通常不会拥有该配置文件,即使它不存在,我们也希望它能正常工作,因此明智的默认值的副本存储在资源文本文件中,该文件位于与磁盘版本的格式相同。
在Windows上运行时我很烦...
资源的"\n"
行结尾全部转换为"\r\n"
!我真的希望不必更改解析器以选择接受一种以上的换行符。
是否有一种方法可以告诉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
// "\r\n" newlines in the defaults byte array
return defaults;
}
答案 0 :(得分:1)
如果通过“资源”文本文件表示通过qrc将二进制资源存储在可执行文件中,则否:qrc永远不会更改文件-它不会区分二进制和文本资源,就其而言,都是二进制文件关心。但是,诸如git之类的版本控制系统可以在签入/签出时执行此操作。您可能还使用转换行尾的API来读取文件。理想情况下,您希望有一个输出文件的复制器,然后是另一个使用qrc嵌入文件然后演示更改的行尾的复制器。