我试图通过C ++程序编辑gsetting。
我已经阅读了这个question,并且我能够获得价值。如果我尝试设置它(使用set_uint
方法),似乎进行了更改(如果我重新读取它显示新值)但是,如果我手动检查,则不是这样。我是否必须应用编辑?还有什么?
示例代码:
#include <giomm/settings.h>
#include <iostream>
int main() {
Glib::RefPtr<Gio::Settings> colorSetting =
Gio::Settings::create("org.gnome.settings-daemon.plugins.color");
Glib::ustring tempKey = "night-light-temperature";
//Works!
cout<<colorSetting->get_uint(tempKey)<<endl;
//Seems to work
colorSetting->set_uint(tempKey, (unsigned) 2300);
//Reads new value correctly
cout<<colorSetting->get_uint(tempKey)<<endl;
return 0;
}
提前致谢。
答案 0 :(得分:2)
由于您的程序在设置值后几乎立即退出,因此GSettings
中的异步写入机制可能在程序退出时没有将新值写入磁盘。
尝试在退出之前添加g_settings_sync()
调用(我不知道它在giomm
中是如何绑定的,但这就是C中调用的内容)。来自the documentation for g_settings_sync()
:
对
GSettings
的写入是异步处理的。因此,在g_settings_set()
返回的时间内,更改不太可能存在于磁盘上。
要明确的是,通常不需要g_settings_sync()
电话;这只是必要的,因为你没有运行主循环。
另请参阅:G_Settings apply changes和Can't change dconf-entry with GSettings,它们涵盖相同的问题,但是从C和JavaScript的角度来看。