【问题标题】:Saving combination of QSpinBox and QComboBox using QSettings使用 QSettings 保存 QSpinBox 和 QComboBox 的组合
【发布时间】:2015-04-20 10:29:50
【问题描述】:

现在,这让我很困惑,

举一个我的示例 GUI 的简短示例,

我。我在主窗口中有四个标签,label_1、label_2、label_3、label_4

二。我也有spinBox、comboBox 和pushButton。

三。 comboBox 中的值为 - ITEM1、ITEM2、ITEM3、ITEM4。

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

spinBox value = 1 and comboBox = ITEM1, label_1->setText("Item 1 in label1")

spinBox value = 1 and comboBox = ITEM2, label_1->setText("Item 2 in label1")

spinBox value = 1 and comboBox = ITEM3, label_1->setText("Item 3 in label1")

spinBox value = 1 and comboBox = ITEM4, label_1->setText("Item 4 in label1")

spinBox value = 2 and comboBox = ITEM1, label_2->setText("Item 1 in label2")

spinBox value = 2 and comboBox = ITEM2, label_2->setText("Item 2 in label2")

spinBox value = 2 and comboBox = ITEM3, label_2->setText("Item 3 in label2")

spinBox value = 2 and comboBox = ITEM4, label_2->setText("Item 4 in label2")

等等.. .. .. 对于所有标签(即 label_2、label_3、label_4)。

样本sn-p,

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)按下按钮;再次从旋转框中选择第二个值(例如 2)从组合框中选择一个值(例如 TEXT2)按下按钮等...以填充所有 4 个标签中的数据。

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

现在,我想确保应用程序重新启动时应用程序的状态应该恢复,

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

【问题讨论】:

  • 您的问题不清楚。您似乎想定期保存状态。每次用户采取行动时,节省的成本都会很高。
  • 我已经提出了更多的观点以便更好地澄清......谢谢你的建议......
  • 实际上我的 UI 中有空间限制,所以我使用旋转框和组合框来设置标签中的值。买不起 6 个组合框,因为我在表格中没有太多空间)。

标签: c++ qt serialization qt4 qsettings


【解决方案1】:

这可以使用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);

【讨论】:

  • 但问题是,我不只设置一次值,我设置一个值并保存,设置第二个值并保存,设置第三个值并保存等等......
【解决方案2】:

你需要保存:

  • 映射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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多