Qt读写注册表

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

前言

在软件开发过程中,我们经常需要在本地存储数据,除了使用本地数据库、ini、text、xml、json等格式的文件之外,我们还可以往注册表中写入数据。这一章节就来介绍一下如何使用QSettings读写注册表。

注册表编辑器

  • 单机【开始】-> 运行
    在这里插入图片描述
  • 输入 regedit 打开注册表
    在这里插入图片描述
    在这里插入图片描述
    Windows注册表实质上是一个庞大的数据库,它存储着下面这些内容:
  1. 用户计算机软、硬件的有关配置和状态信息,应用程序和资源管理器外壳的初始条件、首选项和卸载数据;
  2. 计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件的描述、状态和属性;
  3. 计算机性能记录和底层的系统状态信息,以及各类其他数据;

示例

#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[])
{
    QSettings setting("HKEY_CURRENT_USER\\Software\\Lenovo\\Test", QSettings::NativeFormat);
    setting.setValue("name", "billy");
    setting.setValue("age", 18);
    setting.setValue("delete", 888);

    qDebug() << setting.value("name", "").toString();
    qDebug() << setting.value("age", "").toInt();
    qDebug() << setting.value("delete", "").toInt();

    setting.remove("delete");

    return 0;
}

运行输出:
"billy"
18
888

在这里插入图片描述

  • 15
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Qt的QSettings类来读写注册表数据,也可以直接调用Windows API来读写注册表数据。 以下是调用Windows API读写注册表数据的示例代码: ```c++ #include <windows.h> // 读取注册表中的字符串值 bool readRegistryString(HKEY hKey, const QString& subKey, const QString& valueName, QString& value) { HKEY hSubKey = NULL; DWORD dwType = REG_SZ; DWORD dwSize = 0; if (RegOpenKeyEx(hKey, subKey.toStdWString().c_str(), 0, KEY_READ, &hSubKey) != ERROR_SUCCESS) return false; if (RegQueryValueEx(hSubKey, valueName.toStdWString().c_str(), NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS) { RegCloseKey(hSubKey); return false; } if (dwType != REG_SZ) { RegCloseKey(hSubKey); return false; } WCHAR* pBuffer = new WCHAR[dwSize / sizeof(WCHAR)]; if (RegQueryValueEx(hSubKey, valueName.toStdWString().c_str(), NULL, NULL, (LPBYTE)pBuffer, &dwSize) != ERROR_SUCCESS) { RegCloseKey(hSubKey); delete[] pBuffer; return false; } value = QString::fromWCharArray(pBuffer, dwSize / sizeof(WCHAR)); delete[] pBuffer; RegCloseKey(hSubKey); return true; } // 写入字符串值到注册表中 bool writeRegistryString(HKEY hKey, const QString& subKey, const QString& valueName, const QString& value) { HKEY hSubKey = NULL; if (RegCreateKeyEx(hKey, subKey.toStdWString().c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) != ERROR_SUCCESS) return false; if (RegSetValueEx(hSubKey, valueName.toStdWString().c_str(), 0, REG_SZ, (LPBYTE)value.toStdWString().c_str(), (value.length() + 1) * sizeof(wchar_t)) != ERROR_SUCCESS) { RegCloseKey(hSubKey); return false; } RegCloseKey(hSubKey); return true; } int main(int argc, char *argv[]) { // 读取注册表中的字符串值 QString value; if (readRegistryString(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", "Shell Folders", value)) qDebug() << value; // 写入字符串值到注册表中 if (writeRegistryString(HKEY_CURRENT_USER, "Software\\MyCompany\\MyApp", "MyValue", "Hello World")) qDebug() << "Write registry success."; return 0; } ``` 以上代码演示了如何使用Windows API来读写注册表数据。其中,readRegistryString函数用于读取注册表中的字符串值,writeRegistryString函数用于将字符串值写入注册表中。在main函数中,我们首先使用readRegistryString函数读取注册表中的Shell Folders值,并输出到控制台上,然后使用writeRegistryString函数将字符串值Hello World写入到注册表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值