windows 使用QSettings加载/保存设置

7gyucuyw  于 2022-12-24  发布在  Windows
关注(0)|答案(2)|浏览(234)

我试图从两个窗口加载/保存所有QLineEditQTextEdit的文本,mainwindow和另一个称为widget,这是我如何保存/加载它:

void LoadSettings()
{
    QString m_sSettingsFile = 
         QApplication::applicationDirPath() + "/demosettings.ini";
    QSettings settings(m_sSettingsFile, QSettings::NativeFormat);

    for (auto btn : this->findChildren<QLineEdit*>())
    {
        QString text = settings.value("[M]" + btn->objectName(), "").toString();
        btn->setText(text);
    }

    for (auto btn : this->widget.findChildren<QTextEdit*>())
    {
        QString text = settings.value("[M]" + btn->objectName(), "").toString();
        btn->setText(text);        
    }

    for (auto btn : this->findChildren<QLineEdit*>())
    {
        QString text = settings.value("[W]" + btn->objectName(), "").toString();
        btn->setText(text);
    }

    for (auto btn : this->widget.findChildren<QTextEdit*>())
    {
        QString text = settings.value("[W]" + btn->objectName(), "").toString();
        btn->setText(text);        
    }
}


void SaveSettings()
{
    QString m_sSettingsFile = 
        QApplication::applicationDirPath() + "/demosettings.ini";
    QSettings settings(m_sSettingsFile, QSettings::NativeFormat);

    for (auto btn : this->findChildren<QLineEdit*>())
        settings.setValue("[M]" + btn->objectName(), btn->text());

    for (auto btn : this->findChildren<QTextEdit*>())
        settings.setValue("[M]" + btn->objectName(), btn->toPlainText());

    for (auto btn : this->widget.findChildren<QLineEdit*>())
        settings.setValue("[W]" + btn->objectName(), btn->text());

    for (auto btn : this->widget.findChildren<QTextEdit*>())
        settings.setValue("[W]" + btn->objectName(), btn->toPlainText());
}

但调用Loading后,所有捕获的小部件的文本都变为空白...
此外,是否有“更好”或最有效的方法来编写此任务?

5cg8jx4n

5cg8jx4n1#

根据您使用的标记,我假设您正在MS Windows上进行开发。MS Windows中QSettings的NativeFormat是Windows Registry。在您的情况下,作为第一个参数传递的文件路径必须是Windows Registry路径,但您传递的是FILE路径。或者将Windows注册表路径作为第一个参数传递(即HKEY_LOCAL_MACHINE\SOFTWARE\BLABLA),或者使用IniFormat作为第二个参数。

f0brbegy

f0brbegy2#

你在LoadSettings中混淆了前缀。第二个循环搜索this->widget,但是从“[M]”前缀加载设置。第三个循环反之亦然。
顺便说一句:QSettings支持开箱即用的分组,不需要基于自定义前缀的解决方案。

相关问题