首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改QSettings的路径

无法更改QSettings的路径
EN

Stack Overflow用户
提问于 2017-05-16 09:24:04
回答 1查看 2.5K关注 0票数 1

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

代码语言:javascript
复制
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

因此,为了改变它,我尝试过这样做:

代码语言:javascript
复制
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对象。

我看不出有什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 13:40:14

这绝对是一个权限问题。您的用户可能拥有管理权限,但由于用户帐户控制,您必须显式地将这些权限授予任何新进程,否则该进程将以较低的授权级别执行。例如,这就是为什么Windows每次都询问您是否希望以管理员的身份运行某些软件(例如安装程序),即使您的用户是管理员。

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

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

  • Visual :转到项目的属性,然后链接器>报表文件> UAC执行级别,并将其设置为requireAdministrator。(不要忘记为项目的所有配置设置它)。

  • Qt (qmake):将QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"添加到.pro文件中。

为了完整的回答,我的测试用下面的代码执行:

代码语言:javascript
复制
#include <QSettings>

int main(int argc, char* argv[])
{
  QSettings settings("c:/windows/winf32.ini", QSettings::IniFormat);

  settings.setValue("hello", "world");

  return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43997410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档