Qt读写ini文件的方式对比和Demo示例
在 Qt 中读写 INI 文件 主要有以下几种方式,常用且推荐的是 QSettings,因为它直接支持 INI 格式并且跨平台。以下详细介绍几种方式,并提供示例代码。
✅ 方式 1:QSettings(推荐)
Qt 提供的 QSettings 类可以直接读写 INI 文件,最简单且跨平台。
特点
• ✅ 支持 INI 和注册表(Windows)。
• ✅ 自动管理分组、键值。
• ✅ 读写类型安全(int、double、QString、bool 等)。
• ✅ 自动创建文件。
示例:读写 INI 文件
假设文件路径:config.ini
[User]
name=Keven
age=30
写入示例
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建QSettings对象,指定文件名和格式
QSettings settings("config.ini", QSettings::IniFormat);
// 开始写入数据
settings.beginGroup("User");
settings.setValue("name", "Keven");
settings.setValue("age", 30);
settings.endGroup();
qDebug() << "INI 文件写入完成";
return 0;
}
读取示例
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSettings settings("config.ini", QSettings::IniFormat);
settings.beginGroup("User");
QString name = settings.value("name", "DefaultName").toString();
int age = settings.value("age", 0).toInt();
settings.endGroup();
qDebug() << "用户名:" << name << ", 年龄:" << age;
return 0;
}
✅ 方式 2:QSettings + 自定义路径(跨平台安全)
如果要保存到 应用程序目录 或 用户配置目录,可以用 QStandardPaths 获取路径。
#include <QSettings>
#include <QStandardPaths>
#include <QDir>
QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QDir().mkpath(configPath); // 确保目录存在
QSettings settings(configPath + "/config.ini", QSettings::IniFormat);
settings.setValue("System/Language", "Chinese");
⚡ 方式 3:QFile + QTextStream(手动解析)
适用于需要完全自定义格式或更高控制权的场景。
但 不推荐 直接操作 INI,因为需要自己解析 [Section] 和 key=value。
示例:
#include <QFile>
#include <QTextStream>
#include <QDebug>
int main()
{
QFile file("config.ini");
// 写入
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
out << "[User]\n";
out << "name=Keven\n";
out << "age=30\n";
file.close();
}
// 读取
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
qDebug() << line;
}
file.close();
}
return 0;
}
⚡ 方式 4:第三方库(如 inih、Boost.PropertyTree`)
如果需要:
• 跨平台、跨语言兼容。
• 更复杂的结构(如数组、注释控制)。
可使用第三方库,但在 Qt 项目中一般 QSettings 已足够。
🔑 总结对比
🌟 最佳实践
• 小型应用或配置文件:直接使用 QSettings。
• 需要兼容 Windows 注册表:QSettings(NativeFormat)。
• INI 文件有特殊规则:QFile + QTextStream 自定义解析。
完整示例:
下面给你一个 完整的 Qt Widgets Demo(可在 QtCreator 直接创建 Widgets Application 运行),演示如何通过按钮操作来读写 config.ini。
本示例包含:
✅ 写入 INI 文件(用户名、年龄)
✅ 读取 INI 文件并显示到界面
✅ 界面操作 + QSettings 结合
工程下载地址https://download.csdn.net/download/2501_91893428/91940183
📂 文件结构
QtIniDemo/
├─ main.cpp
├─ mainwindow.h
├─ mainwindow.cpp
└─ mainwindow.ui
1️⃣ mainwindow.ui
用 Qt Designer 拖拽以下控件
最终界面示例:
用户名: [ QLineEdit ]
年龄 : [ QLineEdit ]
[ 保存到INI ] [ 从INI读取 ]
2️⃣ main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
3️⃣ mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSettings>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void saveIni(); // 保存配置
void loadIni(); // 读取配置
private:
Ui::MainWindow *ui;
QString iniPath; // ini文件路径
};
#endif // MAINWINDOW_H
4️⃣ mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QDir>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 指定 INI 文件路径(保存在程序运行目录)
iniPath = QDir::currentPath() + "/config.ini";
qDebug() << "INI文件路径:" << iniPath;
// 连接按钮信号槽
connect(ui->btnSave, &QPushButton::clicked, this, &MainWindow::saveIni);
connect(ui->btnLoad, &QPushButton::clicked, this, &MainWindow::loadIni);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::saveIni()
{
QSettings settings(iniPath, QSettings::IniFormat);
settings.beginGroup("User");
settings.setValue("name", ui->lineEditName->text());
settings.setValue("age", ui->lineEditAge->text().toInt());
settings.endGroup();
settings.sync(); // 确保写入磁盘
qDebug() << "已保存到INI文件";
}
void MainWindow::loadIni()
{
QSettings settings(iniPath, QSettings::IniFormat);
settings.beginGroup("User");
QString name = settings.value("name", "默认用户").toString();
int age = settings.value("age", 0).toInt();
settings.endGroup();
ui->lineEditName->setText(name);
ui->lineEditAge->setText(QString::number(age));
qDebug() << "从INI文件读取完成:" << name << age;
}
5️⃣ 生成的 config.ini 示例
点击“保存到INI”后,会在程序运行目录生成:
[User]
name=Keven
age=30
🚀 编译运行
1. 打开 Qt Creator → 新建 Qt Widgets Application → 替换代码。
2. 点击运行,输入用户名、年龄,点击 保存到INI。
3. 再点击 从INI读取,即可在界面显示存储的值。
🔑 亮点
• 使用 QSettings 自动管理 INI 文件格式。
• settings.sync() 确保数据立即写入磁盘。
• 文件路径使用 QDir::currentPath(),可根据需要替换为 QStandardPaths(跨平台安全)。