引用第6楼xiongyu于2010-07-09 13:05发表的  :
是啊,键值是中文正常。
段名和节点就是乱码了。
我就想解决这个问题额 

首先,这个不叫乱码,Qt设计上就是这么处理的(如果有兴趣,不妨认真看看源码中的函数)
题外:
所谓乱码,是写入和读出时编码不一致造成的。比如你的一个包含中文的文件采用的是utf8编码,当你用仅支持gbk的编辑器打开,看到乱七八糟的字符,那个叫乱码。
这儿显然没这个问题。
这儿只不过对除下面蓝字外的字符都进行了转义处理。
void QSettingsPrivate::iniEscapedKey(const QString &key, QByteArray &result)
{
    result.reserve(result.length() + key.length() * 3 / 2);
    for (int i = 0; i < key.size(); ++i) {
        uint ch = key.at(i).unicode();
        if (ch == '/') {
            result += '\\';
        } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')
                || ch == '_' || ch == '-' || ch == '.') {
            result += (char)ch;
        } else if (ch <= 0xFF) {
            result += '%';
            result += hexDigits[ch / 16];
            result += hexDigits[ch % 16];
        } else {
            result += "%U";
            QByteArray hexCode;
            for (int i = 0; i < 4; ++i) {
                hexCode.prepend(hexDigits[ch % 16]);
                ch >>= 4;
            }
            result += hexCode;
        }
    }
}
当然,如果你非要实现你的功能,你可以修改QSettings 的源码。最好的方法是 使用 QSettings 的manual提到的方式,去定义自己的format
- Format  QSettings::registerFormat ( const QString & extension, ReadFunc  readFunc, WriteFunc  writeFunc, Qt::CaseSensitivity  caseSensitivity = Qt::CaseSensitive )   [static]