qt 读取和写入ini文件,key和value都用中文

在 Qt 中,读取和写入 INI 文件可以使用 QSettings 类。QSettings 类提供了一种简单的方法来保存应用程序设置和其他配置数据。尽管 QSettings 通常用于处理英文键和值,但它同样可以处理包含中文字符的键和值。

以下是一个简单的示例,演示如何在 Qt 中读取和写入包含中文字符的键和值的 INI 文件。

示例代码

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 定义 INI 文件路径
    QString iniFilePath = "config.ini";

    // 创建 QSettings 对象
    QSettings settings(iniFilePath, QSettings::IniFormat);

    // 写入中文键和值
    settings.setValue("设置/中文名称", "中文值");
    settings.setValue("配置/路径", "C:/路径/到/文件");

    // 读取中文键和值
    QString 中文名称的值 = settings.value("设置/中文名称").toString();
    QString 路径的值 = settings.value("配置/路径").toString();

    // 打印读取到的值
    qDebug() << "中文名称的值:" << 中文名称的值;
    qDebug() << "路径的值:" << 路径的值;

    return a.exec();
}

说明

  1. 创建 QSettings 对象
    • QSettings settings(iniFilePath, QSettings::IniFormat);
      • iniFilePath 是 INI 文件的路径。
      • QSettings::IniFormat 指定文件格式为 INI。
  2. 写入中文键和值
    • settings.setValue("设置/中文名称", "中文值");
    • settings.setValue("配置/路径", "C:/路径/到/文件");
      • 这里的键和值都使用了中文字符。
  3. 读取中文键和值
    • QString 中文名称的值 = settings.value("设置/中文名称").toString();
    • QString 路径的值 = settings.value("配置/路径").toString();
      • 使用 settings.value() 方法读取值,并将其转换为 QString
  4. 打印读取到的值
    • 使用 qDebug() 打印读取到的中文值。

注意事项

  • 确保你的项目文件(.pro 文件)中包含了 QT += core,因为 QCoreApplication 和 QSettings 类都属于 Qt Core 模块。
  • 编码问题:确保你的源代码文件使用 UTF-8 编码,并且 Qt Creator 或其他开发工具正确配置为使用 UTF-8 编码。

这个示例展示了基本的读取和写入操作,你可以根据需要扩展它,处理更多的键和值,或者添加错误处理逻辑。

### Qt 配置文件读取写入Qt 中,`QSettings` 类是一个非常强大的工具,用于读取写入配置文件。它支持多种格式,如 INIINI 格式系统特定的存储格式。以下是如何使用 `QSettings` 来读取写入配置文件的详细说明。 #### 1. 使用 QSettings 读取 INI 文件 `QSettings` 提供了简单的方法来操作 INI 文件。可以通过指定文件格式(如 `QSettings::IniFormat`)创建一个 `QSettings` 对象,并使用其方法进行读写操作。 示例代码如下: ```cpp #include <QCoreApplication> #include <QSettings> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建 QSettings 对象,指定 INI 文件格式 QSettings settings("config.ini", QSettings::IniFormat); // 写入配置项 settings.setValue("cell/1", "value1"); settings.setValue("cell/2", "value2"); // 读取配置项 for (int i = 1; i <= 2; i++) { QString key = QString("cell/%1").arg(i); QString value = settings.value(key).toString(); qDebug() << "Key:" << key << "Value:" << value; } return a.exec(); } ``` 上述代码展示了如何通过 `setValue` 方法写入配置项,并通过 `value` 方法读取配置项[^1]。 #### 2. 使用 QMap 批量读取 INI 文件 如果需要将整个 INI 文件的内容一次性加载到内存中,可以使用 `QMap` 来存储键值对。以下是实现代码: ```cpp #include <QCoreApplication> #include <QSettings> #include <QMap> #include <QDebug> class ConfigReader { public: bool loadConfig(const QString &filePath) { QSettings settings(filePath, QSettings::IniFormat); // 获取所有键并存储到 QMap 中 QMap<QString, QVariant> map; QStringList keys = settings.allKeys(); for (const QString &key : keys) { map[key] = settings.value(key); } m_configMap = map; return true; } QVariant getValue(const QString &key) const { return m_configMap.value(key); } private: QMap<QString, QVariant> m_configMap; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); ConfigReader reader; if (reader.loadConfig("config.ini")) { qDebug() << "Cell 1 Value:" << reader.getValue("cell/1"); qDebug() << "Cell 2 Value:" << reader.getValue("cell/2"); } return a.exec(); } ``` 此代码将所有配置项加载到 `QMap` 中,方便后续批量访问[^3]。 #### 3. JSON 格式的配置文件读写 除了 INI 文件Qt 还支持 JSON 格式的配置文件。以下是一个简单的 JSON 文件读写示例: ```cpp #include <QCoreApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString fileName = "config.json"; // 写入 JSON 数据 QJsonObject jsonObject; jsonObject["user"] = QJsonObject{ {"name", "John Doe"}, {"age", 30}, {"email", "johndoe@example.com"} }; QJsonDocument jsonDoc(jsonObject); QFile file(fileName); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(jsonDoc.toJson(QJsonDocument::Indented)); file.close(); } // 读取 JSON 数据 if (file.open(QIODevice::ReadOnly)) { QByteArray jsonData = file.readAll(); QJsonDocument jsonDocRead = QJsonDocument::fromJson(jsonData); if (!jsonDocRead.isNull() && jsonDocRead.isObject()) { QJsonObject obj = jsonDocRead.object(); qDebug() << "Name:" << obj["user"].toObject()["name"].toString(); qDebug() << "Age:" << obj["user"].toObject()["age"].toInt(); qDebug() << "Email:" << obj["user"].toObject()["email"].toString(); } file.close(); } return a.exec(); } ``` 这段代码展示了如何使用 `QJsonDocument` `QJsonObject` 来处理 JSON 格式的配置文件[^4]。 #### 4. XML 格式的配置文件读写 对于 XML 格式的配置文件,可以使用 `QDomDocument` 来解析生成 XML 数据。以下是一个简单的 XML 文件读写示例: ```cpp #include <QCoreApplication> #include <QFile> #include <QDomDocument> #include <QDomElement> #include <QDebug> void writeXml(const QString &fileName) { QDomDocument doc; QDomElement root = doc.createElement("root"); doc.appendChild(root); QDomElement child1 = doc.createElement("child"); child1.setAttribute("id", "1"); child1.appendChild(doc.createTextNode("Value1")); root.appendChild(child1); QDomElement child2 = doc.createElement("child"); child2.setAttribute("id", "2"); child2.appendChild(doc.createTextNode("Value2")); root.appendChild(child2); QFile file(fileName); if (file.open(QIODevice::WriteOnly)) { QTextStream stream(&file); stream << doc.toString(); file.close(); } } void readXml(const QString &fileName) { QDomDocument doc; QFile file(fileName); if (file.open(QIODevice::ReadOnly)) { if (doc.setContent(&file)) { QDomElement root = doc.documentElement(); QDomNodeList children = root.childNodes(); for (int i = 0; i < children.count(); i++) { QDomElement child = children.at(i).toElement(); qDebug() << "ID:" << child.attribute("id") << "Value:" << child.text(); } } file.close(); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString fileName = "config.xml"; writeXml(fileName); readXml(fileName); return a.exec(); } ``` 此代码展示了如何使用 `QDomDocument` 来生成解析 XML 文件[^5]。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值