Qt

2023-10-29

Qt | 配置文件QSettings的使用方法


1、简介

配置文件常见的作用是启动软件是保留上次软件退出是的界面状态,如果不保留配置,且软件界面的内容又比较多,重启软件后界面恢复默认,那么每次打开界面都需要重新设置,这样比较麻烦,所以可以使用配置文件进行保存,软件启动的时候自动加载。


2、QSettings类的使用

Qt提供了QSetting类对配置进行管理,可以显示的指定为ini格式的配置文件,如果不显示的指定,则默认为:

  • windows系统,在注册表中(注册表位置:计算机\HKEY_CURRENT_USER\Software\软件名称)
  • maxos系统,在xml文件中
  • unix系统,在ini文件中

QSettings提供了静态函数对配置进行读取和设置。

使用vaule读取,value第二个参数可用来指定默认值:

QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString();

使用setValue设置:

QSettings("config.ini", QSettings::IniFormat).setValue("baudrate", ui->baudrateComboBox->currentText());

除此之外还可以利用beginGroup和endGroup进行分组,这样对配置文件进行管理比较规范;使用beginReadArray、beginWriteArray、endArray对数组进行读写。


3、使用示例

对配置文件见得保存和写入比较规范的做法是覆写窗体的closeEvent和showEvent函数。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->baudrateComboBox->setEditable(true);
    ui->baudrateComboBox->addItems({"9600", "115200"});
    ui->databitsComboBox->addItems({"8", "7"});
    ui->stopbitsComboBox->addItems({"1", "2"});
    ui->parityComboBox->addItems({tr("无校验"), tr("奇校验"), tr("偶校验")});
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showEvent(QShowEvent *e)
{
    QWidget::showEvent(e);

    ui->baudrateComboBox->setCurrentText(QSettings("config.ini", QSettings::IniFormat).value("baudrate", 9600).toString());
    ui->databitsComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("databits", 0).toInt());
    ui->stopbitsComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("stopbits", 0).toInt());
    ui->parityComboBox->setCurrentIndex(QSettings("config.ini", QSettings::IniFormat).value("parity", 0).toInt());

    // 恢复上次关闭软件时的窗口大小
    QSettings settings("config.ini", QSettings::IniFormat);
    settings.beginGroup("mainwindow");
    resize(settings.value("size").toSize());
    move(settings.value("pos", pos()).toPoint());
    settings.endGroup();
}

void MainWindow::closeEvent(QCloseEvent *e)
{
    QSettings("config.ini", QSettings::IniFormat).setValue("baudrate", ui->baudrateComboBox->currentText());
    QSettings("config.ini", QSettings::IniFormat).setValue("databits", ui->databitsComboBox->currentIndex());
    QSettings("config.ini", QSettings::IniFormat).setValue("stopbits", ui->stopbitsComboBox->currentIndex());
    QSettings("config.ini", QSettings::IniFormat).setValue("parity", ui->parityComboBox->currentIndex());

    // 记录软件关闭前的窗口大小和位置
    QSettings settings("config.ini", QSettings::IniFormat);
    settings.beginGroup("mainwindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();

    QWidget::closeEvent(e);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 的相关文章

  • 从 Qt4 中的文本文件中逐字读取

    我想在 Qt4 中逐字读取一个文本文件 说实话我对它很陌生 我想在另一个文件中每行一个字写入 我可以在 C 中做到这一点 没有任何问题 但是当我尝试在 Qt4 中使用 ifstream 和 ofstream 时 我遇到了错误 这是我的 Qt
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • QSerialPort 中的 readAll() 不包括最后发送的响应

    我正在使用 Qt 来控制串行设备 如果我向串行设备发送命令 我会执行类似的操作serial gt write command r n 我制作了一个按钮 它将纯文本小部件内的文本更改为串行端口的响应 为了获得串口的响应 我使用serial g
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
  • Qt 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 来自另一个类的 Qt C++ GUI 调用

    我通过 gui 拖放创建了一个按钮和一个文本浏览器 UI 以及单击按钮功能是在 mainwindow cpp 中创建的 有一个 main cpp 但这是无关紧要的 因为在单击开始按钮之前程序不会启动 include mainwindow h
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Qt Creator 2.8.1 Qt 5.1.1 Qt Designer Linux 显示新窗体

    我是 Qt 的初学者 所以希望这是一个容易回答的问题 我有相当多的 C 经验 这部分不是问题 我的应用程序的目的是进行代码生成 最初是为类制作头文件和实现文件 我非常喜欢 Code Blocks 上的类向导 但我认为我可以做更多的事情 我有
  • 使用 Qt 的网络服务

    我正在寻找使用 Qt 服务器端 实现 Web 服务的代码 如果您有任何信息 我将不胜感激 Regards 您可以使用libqxt http libqxt bitbucket org doc 0 6 qxtweb html实现服务器端Web服
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • QObject多重继承

    我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 在 Windows 上以 QML 播放 RTSP 视频

    我正在尝试将 QML 中的 RTSP 流播放到视频标签中 如下所示 Repeater model 8 Video Layout fillWidth true Layout fillHeight true fillMode VideoOutp
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • qvariant 作为 qhash 中的键

    我想创建一个带有 QVariants 键的数据结构 它看起来像这样 QHash

随机推荐

  • 浅谈Android版本更新

    关于本文DownloadManager版本更新的源码链接详见我的开源项目AppUpdate 前言 版本升级对于app来讲已经是非常常见的功能了 每次项目的版本迭代 新功能的开发都需要下载更新新版本 通过安装新版本来实现我们的迭代 当然除了这
  • 图解Redis中的9种数据结构

    如图所示 Redis中提供了9种不同的数据操作类型 他们分别代表了不同的数据存储结构 图2 17 数据类型 String类型 String类型是Redis用的较多的一个基本类型 也是最简单的一种类型 它和我们在Java中使用的字符类型什么太
  • Quartz学习总结之核心接口Scheduler、Job

    参考文章 https www cnblogs com mengrennwpu p 7141986 html 核心接口如下 接口 含义 Scheduler scheduler的主要API接口 Job 任务实现接口 期望调度器能够执行 JobD
  • c++ oop构造函数与拷贝控制

    class Quote public Quote int x x x 如果我们删除的是一个指向派生类对象的基类指针 则需要虚析构函数 virtual Quote default 动态绑定析构函数 int x virtual void sho
  • [YOLO专题-18]:YOLO V5 - ultralytics代码解析-总体架构

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122356975 目录 第1章 YOL
  • 多线程进阶

    同步与互斥 什么是同步 有序性 完整性 原子性 什么是互斥 什么是临界区 可以限制线程并发访问共享资源 达到同步与互斥目的的程序片段 阻隔线程 排斥线程 同步代码块 格式示例 使用说明 同步方法 使用格式 使用解释 示例代码 释放同步监视器
  • 03C++11多线程编程之测试join,detach传各种实参时形参的拷贝次数

    03C 11多线程编程之测试join detach传各种实参时形参的拷贝次数 首先我们看下面的总结测试图 然后一步步的测试 1 这里我们先测试join传实参的类型 当实参为普通对象时 1 当形参为普通对象时 拷贝了两次 2 当形参为引用时
  • 计算机二级python(本人整理的所有含答案操作题)

    全国计算机二级 本人整理的所有操作题 包括答案 直接上链接 有道云笔记 喜欢的可以直接下载 本人复习了三天 看了视频 把所有解题记了一遍 直接过了 https note youdao com ynoteshare index html id
  • 机器学习常识 17: 多标签学习

    摘要 多标签学习从标签个数上来扩展数据模型 进一步还有标签分布学习 1 基本概念 多标签学习在 机器学习常识 3 分类 回归 聚类 中简单提到过 这里列举出几个相关概念 一起来讨论下 将训练数据的标签表示为 Y mathbf Y Y 二分类
  • idea搜索不到free mybatis plugins

    作者Gitee主页说明 换行业 不再维护 Jb market也提交了下架 下面有一个peer move and update插件 地址是 https github com chuntungho free mybatis plugins 或者
  • Google登录授权详细过程

    前言 这篇文章包含了google登录授权从API创建 到使用Java代码完成登录的一个完整demo 主要为了实现google关联用户的服务 如google merchant center等 如果仅仅需要使用google邮箱登录 建议由前端实
  • 10个统计分析方法

    为什么要学习统计学习 首先 为了知道如何以及何时使用各种分析方法 理解各种分析方法背后的思想很重要 要想掌握更精巧复杂的方法 你必须先理解较简单的方法 其次 当你想准确地评估一种分析方法的效果时 你得知道其运行的多好或者多么不好 第三 这是
  • Spring Boot引起的“堆外内存泄漏”排查及经验总结

    背景 为了更好地实现对项目的管理 我们将组内一个项目迁移到MDP框架 基于Spring Boot 随后我们就发现系统会频繁报出Swap区域使用量过高的异常 笔者被叫去帮忙查看原因 发现配置了4G堆内内存 但是实际使用的物理内存竟然高达7G
  • 7.1 超级账本

    Matthew Hancock Ed Vaizey以及Linux基金会执行董事Jim Zemlin都认为区块链技术和分布式账本这两个概念是可以互换的 通过分布式账本 几乎任何有价值的东西都可以被跟踪和交易 Jim Zemlin认为 分布式账
  • 10个杀手级应用的Python自动化脚本

    10个杀手级应用的Python自动化脚本 重复的任务总是耗费时间和枯燥的 想象一下 逐一裁剪100张照片 或者做诸如Fetching APIs 纠正拼写和语法等任务 所有这些都需要大量的时间 为什么不把它们自动化呢 在今天的文章中 我将与你
  • VS2012创建ATL工程及使用MFC测试COM组件

    VS2012创建ATL工程及使用MFC测试COM组件 原创 2015年01月22日 16 23 21
  • 浏览器开发者模式F12的基本使用

    chrome浏览器的开发者工具可通过F12快捷键打开 1 调整开发者工具在页面的显示 2 检查界面元素 设备切换 网页或终端 终端选择 断点查看 3 可查看不同手机的界面适配问题 4 如何打断点 5 目标位置界面点击鼠标右键 检查 也可打开
  • ubuntu中conda安装pytorch 和 torch-geometric

    conda创建虚拟环境 conda create n pytorch python 3 7 conda activate pytorch 安装cuda nvidia smi 在这里插入图片描述 https img blog csdnimg
  • 铃木uy125最高时速_6K公里了谈谈轻骑铃木UY125的感受

    这也是很多人关心的 我以前是骑电驴的 电驴的动力弱 上坡无力这些都是常态 大排 公升的我没骑过 所以不谈 仅仅说下我的感受 转弯很灵活 我1米85的个子 极限转弯时 车把不会碰到膝盖 压弯不能太低 会蹭两侧的板子 离地间隙不高 比如上绿化带
  • Qt

    Qt 配置文件QSettings的使用方法 1 简介 配置文件常见的作用是启动软件是保留上次软件退出是的界面状态 如果不保留配置 且软件界面的内容又比较多 重启软件后界面恢复默认 那么每次打开界面都需要重新设置 这样比较麻烦 所以可以使用配