如何在Qt中保存对话框的状态?

2024-03-04

假设对话框中有复选框、选项等控件,如何在 Qt 中保存对话框的状态?

我应该使用 QSettings 还是其他东西?

Thanks.


我遇到了同样的问题。 谷歌搜索并没有太大帮助。 所以最后我写了自己的解决方案。

我创建了一组函数,用于在创建和销毁时读取和写入对话框的每个子控件的状态。 它是通用的,可用于任何对话框。

它的工作原理如下:

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QMoMSettings::readSettings(this);
}

Dialog::~Dialog()
{
    QMoMSettings::writeSettings(this);
    delete ui;
}

...

void QMoMSettings::readSettings(QWidget* window)
{
    QSettings settings;

    settings.beginGroup(window->objectName());
    QVariant value = settings.value("pos");
    if (!value.isNull())
    {
        window->move(settings.value("pos").toPoint());
        window->resize(settings.value("size").toSize());
        recurseRead(settings, window);
    }
    settings.endGroup();
}

void QMoMSettings::writeSettings(QWidget* window)
{
    QSettings settings;

    settings.beginGroup(window->objectName());
    settings.setValue("pos", window->pos());
    settings.setValue("size", window->size());
    recurseWrite(settings, window);
    settings.endGroup();
}

void QMoMSettings::recurseRead(QSettings& settings, QObject* object)
{
    QCheckBox* checkbox = dynamic_cast<QCheckBox*>(object);
    if (0 != checkbox)
    {
        checkbox->setChecked(settings.value(checkbox->objectName()).toBool());
    }
    QComboBox* combobox = dynamic_cast<QComboBox*>(object);
    if (0 != combobox)
    {
        combobox->setCurrentIndex(settings.value(combobox->objectName()).toInt());
    }
    ...

    foreach(QObject* child, object->children())
    {
        recurseRead(settings, child);
    }
}

void QMoMSettings::recurseWrite(QSettings& settings, QObject* object)
{
    QCheckBox* checkbox = dynamic_cast<QCheckBox*>(object);
    if (0 != checkbox)
    {
        settings.setValue(checkbox->objectName(), checkbox->isChecked());
    }
    QComboBox* combobox = dynamic_cast<QComboBox*>(object);
    if (0 != combobox)
    {
        settings.setValue(combobox->objectName(), combobox->currentIndex());
    }
    ...

    foreach(QObject* child, object->children())
    {
        recurseWrite(settings, child);
    }
}

希望这对我之后的人有所帮助。

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

如何在Qt中保存对话框的状态? 的相关文章

随机推荐

  • 无法在l5-swagger中生成API文档

    我开始学习招摇了 我正在尝试做书上所做的同样的事情 使用 Angular 6 和 Laravel 5 进行全栈 Web 开发实践 输入命令后使用 php fpm bash php artisan l5 swagger generate 我在
  • jQuery .when().done() 不工作

    首先我想说我是 jQuery 的新手 我怀疑我只是做了一些愚蠢的事情 所以希望这对某人来说会很简单 我正在尝试向我的网站添加滑动移动子菜单 我想要一种手风琴效果 如果我单击一个父链接 它的子子菜单将打开 所有其他子菜单将关闭 问题在于时间
  • Console.ReadLine() 在 VS Code 中不起作用,用 C# 编写代码

    我正在学习 C 并且正在使用 VS Code 当我尝试使用 Console ReadLine 从用户那里获取输入时 它不起作用 我从一个视频中提到了它 它做了完全相同的事情 但经过几次谷歌搜索后 我仍然不知道我哪里出了问题 Console
  • 将 ROW_NUMBER 列添加到流数据帧

    我对 Spark 和 SQL 还很陌生 我正在尝试向我的 df 添加一列 然后将其保存到 Delta 表 该列为每个记录 行提供唯一的 id 并在每次更新特定记录时递增它 我试图执行以下操作 SELECT etc CONCAT somero
  • 类型错误:列表索引必须是整数或切片,而不是列表

    数组 某种具有 3 列和无限数量的行且其中包含数据的列表 Volume array 0 2 counter 0 for i in array if Volume array i 2 lt why is this line a problem
  • 哪些 GOF 设计模式具有完全不同的实现(java 与 Scala)

    最近我读到以下问题 在 Scala 中是否有使用访问者模式的用例 我是否应该在每次使用 Scala 时都使用模式匹配 Java 中的访问者模式 标题问题的链接 Scala 中的访问者模式 https stackoverflow com qu
  • 文本编辑器的数据结构

    这是一道面试题 您将使用什么数据结构来存储文本编辑器中的文本 在老式的 ZX Spectrum 上 一个 或多个 我不知道 文本编辑器使用了非常简单的结构 有一个很大的缓冲区 占用了所有空闲 RAM 文本在光标处分成两部分 光标之前的部分放
  • Gradle:如何通过运行 Gradle 4.1 任务通过 eclipse ECJ(JDT 核心)编译 Java

    我有一个可以很好构建的项目日食 欧洲法院 But 甲骨文javac无法构建它 一些原因如链接中所示 ecj和javac的区别 https stackoverflow com questions 3061654 what is the dif
  • C语言中的二维数组如何变成一维数组?

    如果有人可以向我解释以下行为 我将不胜感激 假设我声明一个静态二维数组 float buffer NX NY 现在 如果我想填充这个数组 我注意到可以这样做 initarray buffer NX NY define INITDATAVAL
  • 没有 Redux 的情况下组合Reducer

    我有一个没有 redux 的应用程序 我使用钩子和钩子 useReducer context 处理全局状态 我有 1 个 useReducer 它就像一个 Redux 商店 但要做到这一点我只能发送 1 个减速器 在该减速器中 我拥有所有状
  • 根据数组中的另一个 id 仅对多数组中的第一项进行排序 (PHP)

    我不知道该怎么做 请参阅下面我的数组 我在 while 循环中运行这个数组 需要先找到 attach id 对于每个 topic id 并可以使用 topic id在循环中设置的 正确的输出将是 第一个循环 attach id gt 179
  • 神经网络在一个纪元后趋于平坦

    我正在使用 keras 创建一个卷积神经网络 尝试将图像分类为两个不同的类 并且出于某种原因 在第一个纪元之后 准确性永远不会改变 使用 Keras 后to categorical 我的标签看起来像 0 1 1 0 1 0 0 1 我的模型
  • Amazon SES SMTP Python 用法

    我试图诊断为什么通过 Amazon SES 发送电子邮件无法通过 python 工作 以下示例演示了该问题 其中user and pass设置为适当的凭据 gt gt gt import smtplib gt gt gt s smtplib
  • System.Timers.Timer 与 System.Threading.Timer

    我最近一直在检查一些可能的计时器 并且System Threading Timer https learn microsoft com en us dotnet api system threading timer and System T
  • 即使有标记,pytest-django 也不允许数据库访问

    我很难找出我的设置出了什么问题 我正在尝试测试登录视图 无论我尝试什么 我都会得到 Database access not allowed use the django db mark or the db or transactional
  • 统一处理非托管 API 中的错误代码

    我正在围绕一个相当大的非托管 API 编写一个包装器 几乎每个导入的方法在失败时都会返回一个常见的错误代码 现在 我正在这样做 ErrorCode result Api Method if result ErrorCode SUCCESS
  • Playframework 与 CSRF:“会话中未找到 CSRF 令牌”?

    我正在使用 Playframework 及其内置 CSRF 过滤器和 Security Authenticator 系统制作一个简单的身份验证系统 但我遇到了一个问题 当用户填写登录名 密码并提交输入时 出现以下错误 在会话中找不到 CSR
  • 如何更新 SQL 中游标获取的列

    在进一步讨论之前 是的 我知道与基于集合的操作相比 游标的性能很差 在这种特殊情况下 我在包含 100 条左右记录的临时表上运行游标 并且该临时表始终相当小 因此性能不如灵活性那么重要 我的困难是我无法找到如何更新游标获取的列的示例 以前
  • 在 Git 中运行预提交挂钩。有没有办法验证脚本是否正在运行?

    我想运行 Git 按照博客的建议 我使用了 git init初始化存储库 然后 git在 hooks 目录中存在钩子的位置创建文件夹 然后按照我重命名的脚本的建议pre commit sample as pre commit它不起作用 所以
  • 如何在Qt中保存对话框的状态?

    假设对话框中有复选框 选项等控件 如何在 Qt 中保存对话框的状态 我应该使用 QSettings 还是其他东西 Thanks 我遇到了同样的问题 谷歌搜索并没有太大帮助 所以最后我写了自己的解决方案 我创建了一组函数 用于在创建和销毁时读