使用 QSettings 保存 QSpinBox 和 QComboBox 的组合
Saving combination of QSpinBox and QComboBox using QSettings
现在,这是一个让我感到困惑的问题,
给出我的示例 GUI 的一个简短示例,
我。我在主窗口中有四个标签,label_1
、label_2
、label_3
、label_4
二。我还有一个 spinBox
、comboBox
和一个 pushButton
。
三。 comboBox 中的值为 - ITEM1、ITEM2、ITEM3、ITEM4。
四。当用户运行程序时,他从 spinBox
(1-4) 中选择值,并从 comboBox
中选择值。每次按下 pushButton
标签文本都会更改,标签文本显示的逻辑
旋转框值 = 1 和组合框 = ITEM1,label_1->setText("Item 1 in label1")
旋转框值 = 1 和组合框 = ITEM2,label_1->setText("Item 2 in label1")
旋转框值 = 1 和组合框 = ITEM3,label_1->setText("Item 3 in label1")
旋转框值 = 1 和组合框 = ITEM4,label_1->setText("Item 4 in label1")
旋转框值 = 2 和组合框 = ITEM1,label_2->setText("Item 1 in label2")
旋转框值 = 2 和组合框 = ITEM2,label_2->setText("Item 2 in label2")
旋转框值 = 2 和组合框 = ITEM3,label_2->setText("Item 3 in label2")
旋转框值 = 2 和组合框 = ITEM4,label_2->setText("Item 4 in label2")
等等.. .. .. 对于所有标签(即 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) 按下按钮;再次从旋转框中选择第二个值(例如 2)从组合框中选择一个值(例如 TEXT2)按下按钮等...以在所有 4 个标签中填充数据。
即理论上,SpinBox中的值就是标签号。
现在,我想确保应用程序重新启动后应用程序的状态应该恢复,
即如何保存 SpinBox 值和 ComboBox 值的组合???
这可以使用 QSettings
来完成。您可以在应用程序终止时保存设置。它可以在 main window 的析构函数中完成:
QSettings settings("organizationName","applicationName");
settings.setValue("settings/spinValue",ui->spinBox->value());
settings.setValue("settings/comboText",ui->comboBox->currentText());
在主 window 构造函数中,您可以阅读并相应地设置它们:
QSettings settings("organizationName","applicationName");
spinValue = settings.value("settings/spinValue","").toInt();
comboText = settings.value("settings/comboText","").toString();
ui->spinBox->setValue(spinValue);
ui->comboBox->setCurrentText(comboText);
您需要保存:
- 映射
spinValue <-> comboText <-> LabelText
。在最简单的形式中,这是一个具有三列的 table .
- 最后一个
comboText
,最后一个spinValue
。
- 可能是所有可能的旋转值,或所有可能的组合文本。但这可以在阅读上面的table
后推导出来
因为你的逻辑是 table 我不会使用 QSettings
来保存,而是 xml (或 table 文本文件)。有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;
现在,这是一个让我感到困惑的问题,
给出我的示例 GUI 的一个简短示例,
我。我在主窗口中有四个标签,label_1
、label_2
、label_3
、label_4
二。我还有一个 spinBox
、comboBox
和一个 pushButton
。
三。 comboBox 中的值为 - ITEM1、ITEM2、ITEM3、ITEM4。
四。当用户运行程序时,他从 spinBox
(1-4) 中选择值,并从 comboBox
中选择值。每次按下 pushButton
标签文本都会更改,标签文本显示的逻辑
旋转框值 = 1 和组合框 = ITEM1,label_1->setText("Item 1 in label1")
旋转框值 = 1 和组合框 = ITEM2,label_1->setText("Item 2 in label1")
旋转框值 = 1 和组合框 = ITEM3,label_1->setText("Item 3 in label1")
旋转框值 = 1 和组合框 = ITEM4,label_1->setText("Item 4 in label1")
旋转框值 = 2 和组合框 = ITEM1,label_2->setText("Item 1 in label2")
旋转框值 = 2 和组合框 = ITEM2,label_2->setText("Item 2 in label2")
旋转框值 = 2 和组合框 = ITEM3,label_2->setText("Item 3 in label2")
旋转框值 = 2 和组合框 = ITEM4,label_2->setText("Item 4 in label2")
等等.. .. .. 对于所有标签(即 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) 按下按钮;再次从旋转框中选择第二个值(例如 2)从组合框中选择一个值(例如 TEXT2)按下按钮等...以在所有 4 个标签中填充数据。
即理论上,SpinBox中的值就是标签号。
现在,我想确保应用程序重新启动后应用程序的状态应该恢复,
即如何保存 SpinBox 值和 ComboBox 值的组合???
这可以使用 QSettings
来完成。您可以在应用程序终止时保存设置。它可以在 main window 的析构函数中完成:
QSettings settings("organizationName","applicationName");
settings.setValue("settings/spinValue",ui->spinBox->value());
settings.setValue("settings/comboText",ui->comboBox->currentText());
在主 window 构造函数中,您可以阅读并相应地设置它们:
QSettings settings("organizationName","applicationName");
spinValue = settings.value("settings/spinValue","").toInt();
comboText = settings.value("settings/comboText","").toString();
ui->spinBox->setValue(spinValue);
ui->comboBox->setCurrentText(comboText);
您需要保存:
- 映射
spinValue <-> comboText <-> LabelText
。在最简单的形式中,这是一个具有三列的 table . - 最后一个
comboText
,最后一个spinValue
。 - 可能是所有可能的旋转值,或所有可能的组合文本。但这可以在阅读上面的table 后推导出来
因为你的逻辑是 table 我不会使用 QSettings
来保存,而是 xml (或 table 文本文件)。有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;