0

我正在尝试通过 C++ 程序编辑 gsetting。我已经阅读了这个问题,并且能够获得价值。如果我尝试设置它(使用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;
}

提前致谢。

4

1 回答 1

2

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

尝试g_settings_sync()在退出之前添加一个调用(我不知道它是如何绑定的giomm,但这就是 C 中的调用)。从文档中g_settings_sync()

对 a 的写入GSettings是异步处理的。出于这个原因,这些更改不太可能在g_settings_set()返回时将其写入磁盘。

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

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

于 2017-04-30T21:03:20.703 回答