我正在尝试通过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;
}


提前致谢。

最佳答案

由于您的程序在设置该值后几乎立即退出,因此GSettings中的异步写入机制很可能在程序退出时尚未将新值写入磁盘。

尝试在退出前添加g_settings_sync()调用(我不知道giomm中的绑定方式,但这就是C中的调用)。从the documentation for g_settings_sync()


  对GSettings的写入将异步处理。因此,在g_settings_set()返回之前,更改几乎不可能将更改保存到磁盘。


需要明确的是,通常不需要g_settings_sync()调用。这仅在此处是必需的,因为您没有运行主循环。

另请参见:G_Settings apply changesCan't change dconf-entry with GSettings,它们涵盖相同的问题,但从C和JavaScript的角度来看。

08-28 10:42