如何使用 QSettings 保存和加载数据?

Posted

技术标签:

【中文标题】如何使用 QSettings 保存和加载数据?【英文标题】:How Do I Save and Load Data Using QSettings? 【发布时间】:2020-02-28 00:17:01 【问题描述】:

我是 QT5 的完全初学者,我在 YouTube 上搜索了任何 QSettings 教程,但只找到了其中的 2 个,都是西班牙语的。

我正在尝试存储来自 textEdit 的简单文本,然后在单击保存/加载按钮时加载它。到目前为止,我还无法做到这一点。到目前为止,这是我的代码,没有错误,只是不起作用。

Widget.cpp

void Widget::saveText(QString key, QString text)

    QSettings settings("App", "BillReminder");
    settings.beginGroup("Text");
    settings.setValue(key + "t", text);
    settings.endGroup();


QString Widget::loadText(QString key)

    QSettings settings("App", "BillReminder");
    settings.beginGroup("Text");
    settings.value(key + "t", text).toString();
    settings.endGroup();
    return QString(text);

void Widget::on_saveButton_clicked()

    saveText("textEdit", text);


void Widget::on_loadButton_clicked()

    QString text1 = loadText(text);
    ui->textEdit->setText(text1);

widget.h - class Widget : public QWidget

private:
    Ui::Widget *ui;
    QString text;

    void saveText(QString key, QString text);
    QString loadText(QString key);
    void SetText(QString key);

【问题讨论】:

【参考方案1】:

问题出在您的 loadText() 方法中。 QSettings::value() 是一个函数,它返回从 QSettings 存储中检索到的值。第二个参数只是一个默认值,如果您的设置存储不包含请求的键,则会返回该值。

QString Widget::loadText(QString key)

    QSettings settings("App", "BillReminder");
    settings.beginGroup("Text");
    QString theValue = settings.value(key + "t", text).toString();
    settings.endGroup();
    return theValue;

【讨论】:

嗯,我尝试将 settings.value 保存到如上所示的变量中并返回,但似乎仍然不起作用。 我可以告诉您您向我们展示的代码有什么问题,但对于您未展示的代码,我们无能为力。而且 “似乎不起作用” 也不是有助于诊断的错误消息。【参考方案2】:

此代码示例包含许多问题。

    不要隐藏变量名(例如“文本”是方法参数和成员变量);使用例如下划线表示成员变量 以上关于将值读取为返回值的答案也解决了一个问题 on_saveButton 使用“textEdit”字符串作为设置键,但 on_loadButton 使用了错误的“text”成员变量字符串作为键 -> 您想使用相同的字符串来加载存储的变量,即您正在阅读其他内容。 您正在保存在您的示例中未初始化的成员变量“text”,即它可能为空;稍后您将使用存储的设置设置 UI 文本编辑(在您的示例中为空字符串?)

请通过QSettings Qt documentation 获取工作示例。

【讨论】:

以上是关于如何使用 QSettings 保存和加载数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings

以人类可读的形式在 QSettings 中保存自定义 QMap 模板实例化

如何在“QSettings”中保存/更改“QLineEdit”的文本并进行“QPushButton”调用

如何将自定义类型保存到 QSettings?

QSettings():如何保存到当前工作目录

如何修复 QTableWidget setText/setCellWidget 在加载 QSettings 时导致崩溃