如何使用 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 模板实例化