我使用c:\windows\winf32.ini存储软件参数,我可以通过这样做来读取它:
QSettings settings("c:/windows/winf32.ini", QSettings::IniFormat, Q_NULLPTR);我可以用绝对路径读取文件,但是当我使用setValue()和sync()时,文件不会被更新。
但是,对于相对路径"winf32.ini",他正确地编写了更改,但它不在c:\windows\路径中。
默认情况下,对于QSettings::IniFormat,使用的是折叠文件:
因此,为了改变它,我尝试过这样做:
QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, "c:/windows");
QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, "c:/windows");
QSettings settings("winf32.ini", QSettings::IniFormat, Q_NULLPTR); 但是settings是空的。我在声明我的setPath变量之前使用了settings,因为在QSettings文档中,它说:
警告:此函数不影响现有的QSettings对象。
我看不出有什么问题。
发布于 2017-05-18 13:40:14
这绝对是一个权限问题。您的用户可能拥有管理权限,但由于用户帐户控制,您必须显式地将这些权限授予任何新进程,否则该进程将以较低的授权级别执行。例如,这就是为什么Windows每次都询问您是否希望以管理员的身份运行某些软件(例如安装程序),即使您的用户是管理员。
要检查它,只需打开文件资源管理器,转到编译可执行文件的目录,右键单击可执行文件并选择“以管理员身份运行”。Windows (实际上,UAC)会要求您确认操作。之后,检查您的INI文件已被修改。
您可以通过设置链接器标志,强制可执行文件每次运行时都请求获得管理权限:
requireAdministrator。(不要忘记为项目的所有配置设置它)。
QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"添加到.pro文件中。为了完整的回答,我的测试用下面的代码执行:
#include <QSettings>
int main(int argc, char* argv[])
{
QSettings settings("c:/windows/winf32.ini", QSettings::IniFormat);
settings.setValue("hello", "world");
return 0;
}https://stackoverflow.com/questions/43997410
复制相似问题