gpt4 book ai didi

c++ - 无法更改 QSettings 的路径

转载 作者:行者123 更新时间:2023-11-30 05:13:18 26 4
gpt4 key购买 nike

我使用c:\windows\winf32.ini 来存储软件参数,我可以这样读取它:

QSettings settings("c:/windows/winf32.ini", QSettings::IniFormat, Q_NULLPTR);

我可以用绝对路径读取文件,但是当我使用 setValue()sync() 时,文件没有更新。
但是,使用相对路径 "winf32.ini" 他正确地写入了更改,但它不在 c:\windows\ 路径中。
默认情况下,对于 QSettings::IniFormat,使用以下文件:

  1. FOLDERID_RoamingAppData\MySoft\Star Runner.ini
  2. FOLDERID_RoamingAppData\MySoft.ini
  3. FOLDERID_ProgramData\MySoft\Star Runner.ini
  4. FOLDERID_ProgramData\MySoft.ini

所以要改变它,我试过这个:

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 是空的。我在声明我的 settings 变量之前使用 setPath 因为在 QSettings doc 中,它说:

Warning: This function doesn't affect existing QSettings objects.

我不明白这是什么问题。

最佳答案

这绝对是权限问题。您的用户可能具有管理权限,但由于 UAC (User Account Control)您必须明确地将这些特权授予任何新进程,否则该进程将以较低的授权级别执行。例如,这就是为什么 Windows 每次都会询问您是否要以管理员身份运行某些软件(例如安装程序)的原因,即使您的用户 是管理员也是如此。

要检查它,只需打开文件资源管理器,转到编译可执行文件的目录,右键单击可执行文件并选择“以管理员身份运行”。 Windows(实际上是 UAC)会要求您确认操作。之后,检查您的 INI 文件是否已被修改。

您可以通过设置链接器标志强制您的可执行文件在每次运行时请求管理权限:

  • Visual Studio:转到项目的属性,然后是 Linker> Manifest File> UAC Execution Level 并将其设置为 需要管理员。 (不要忘记为项目的所有配置设置它)。

    enter image description here

  • Qt Creator (qmake):将 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;
}

关于c++ - 无法更改 QSettings 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43997410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com