У меня есть программа Qt, которая была разработана для Linux. В нем есть несколько пользовательских настроек, которые анализируются из файла конфигурации. Конечно, пользователи не склонны иметь этот конфигурационный файл во время первого запуска, и мы хотим, чтобы все работало, даже если его нет, поэтому копия разумных значений по умолчанию хранится в текстовом файле ресурса, который находится в тот же формат, что и для версии на диске.
Я столкнулся с раздражением при работе на 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;
}