使用QSettings保存QSpinBox和QComboBox的组合

时间:2015-02-19 06:53:44

标签: c++ qt serialization qt4 qsettings

现在,这是令我感到困惑的一个,

给出我的示例GUI的简短示例

我。我在主窗口中有四个标签,label_1label_2label_3label_4

II。我还有一个spinBoxcomboBox和一个pushButton

III。 comboBox中的值为 - ITEM1,ITEM2,ITEM3,ITEM4。

IV。当用户运行程序时,他从spinBox(1-4)中选择值并从comboBox中选择值。每次按pushButton时,标签文字都会更改,标签文字显示的逻辑

spinBox value = 1和comboBox = ITEM1,label_1-> setText(“label1中的第1项”)

spinBox value = 1和comboBox = ITEM2,label_1-> setText(“label1中的第2项”)

spinBox value = 1和comboBox = ITEM3,label_1-> setText(“label1中的第3项”)

spinBox value = 1和comboBox = ITEM4,label_1-> setText(“label1中的第4项”)

spinBox value = 2和comboBox = ITEM1,label_2-> setText(“label2中的第1项”)

spinBox value = 2和comboBox = ITEM2,label_2-> setText(“label2中的第2项”)

spinBox value = 2和comboBox = ITEM3,label_2-> setText(“label2中的第3项”)

spinBox value = 2和comboBox = ITEM4,label_2-> setText(“label2中的第4项”)

依旧.. .. ..对于所有标签(即label_2,label_3,label_4)。

示例代码段,

void MainWindow::on_pushButton_clicked()
{
    int spinValue;
    QString comboText;
    spinValue=ui->spinBox->value();
    comboText=ui->comboBox->currentText();
    if(spinValue==1)
    {
        if(comboText=="LABEL 1")
        {
            ui->label->setText("ITEM 1 in field 1");
        }
        else if(comboText=="LABEL 2")
        {
            ui->label->setText("ITEM 2 in field 1");
        }.. .. .. .. .. .. ..

修改 为了更好地说明,用户从旋转框中选择一个值(例如1)从组合框中选择一个值(例如TEXT1)按下按钮;再次从spinbox中选择第二个值(例如2)从组合框中选择一个值(例如TEXT2)按下按钮等...以填充所有4个标签中的数据。

即。理论上,SpinBox中的值是标签号。

现在,我想确保应用程序是否重新启动应用程序应该还原的状态,

即。如何保存SpinBox值和ComboBox值的组合???

2 个答案:

答案 0 :(得分:2)

可以使用QSettings完成此操作。您可以在应用程序终止时保存设置。它可以在主窗口的析构函数中完成:

QSettings settings("organizationName","applicationName");
settings.setValue("settings/spinValue",ui->spinBox->value());
settings.setValue("settings/comboText",ui->comboBox->currentText());

在主窗口构造函数中,您可以相应地读取和设置它们:

QSettings settings("organizationName","applicationName");
spinValue = settings.value("settings/spinValue","").toInt();
comboText = settings.value("settings/comboText","").toString();
ui->spinBox->setValue(spinValue);
ui->comboBox->setCurrentText(comboText);

答案 1 :(得分:1)

您需要保存:

  • 映射spinValue <-> comboText <-> LabelText。在最简单的形式中,这是一个有三列的表。
  • 最后comboText,以及最后spinValue
  • 可能是所有可能的旋转值,或所有可能的组合文本。但这可以在阅读上表后推断出来

因为你的逻辑是一个表我不会使用QSettings来保存,而是使用xml(或表文本文件)。有resources to read\write xml using Qt

这样的xml
  <?xml version="1.0" encoding="UTF-8" ?>
  <default spin="1" combo="LABEL 2"/>
  <mappings>
  <mapping spin="1" combo="LABEL 1">"VALUE A"</mapping>
  <mapping spin="1" combo="LABEL 2">"VALUE B"</mapping>
  <mapping spin="2" combo="LABEL 1">"VALUE C"</mapping>
  <mapping spin="2" combo="LABEL 2">"VALUE D"</mapping>
  </mappings>

以后可以加载以构建地图

std::map<std::pair<int, QString>, QString> mapLabeltextfromSpinAndCombo;