我正在创建一个应用程序,其中一部分是从存储某些首选项的XML中读取的。但是,每当我构建项目时,所有源都会被复制,但首选项文件却没有!我已将以下内容添加到.pro文件中 -
RESOURCES += rsc.qrc
我的rsc.qrc包含
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>data/preferences.xml</file>
<file>data/gamedata.xml</file>
</qresource>
</RCC>
现在每当我尝试打开preferences.xml时
QFile preferences(":/data/preferences.xml");
if(!preferences.exists()){
preferences.open(QFile::WriteOnly);
preferences.write("abc");
qDebug() << "Written";
}
else {
qDebug() << "File exists";
}
绝对没有打印任何内容,甚至应用程序的其余部分也无法正常工作。
答案 0 :(得分:0)
您未在示例中正确使用资源部分。 它很可能不起作用,因为您在构建应用程序后尝试写入嵌入到可执行文件中的资源。阅读很好,但写作不能按照定义工作。
如果您需要可编辑的设置文件,则必须将它们与可执行文件一起分发,或使用其他方法来读取/写入QSettings等设置。
但是,使用QSettings还意味着,如果使用默认配置,如果值不存在,则需要在加载函数中配置所有默认设置。这意味着您在Windows上使用注册表。
您可以选择在QSettings的构造函数中强制使用INI文件格式,如果您想提供默认设置INI文件而不是xml文件,这是有意义的。
如果您想存储更复杂的数据,可能还需要xml文件,因此如果您想坚持使用,则需要一种方法将设置文件复制到构建路径。这可以使用QMAKE_POST_LINK在您的专业文件中完成。
示例:
COPY_CMD = "$$PWD\\data\\preferences.xml $$OUT_PWD\\release\\data\\preferences.xml"
COPY_CMD = $${QMAKE_COPY} $$replace( COPY_CMD, "/", "\\" ) $$escape_expand( \\n\\t )
QMAKE_POST_LINK += $$COPY_CMD