使用 QSettings保存 QSpinBox 和 QComboBox 的组合
Saving combination of QSpinBox and QComboBox using QSettings
现在,这是一个让我感到困惑的问题,
举一个我的示例 GUI 的简短示例,
我。我在主窗口中有四个标签,label_1
、label_2
、label_3
、label_4
ii. 我有spinBox
,comboBox
和pushButton
。
iii. 组合框中的值为 - 项目1、项目2、项目3、项目4。
iv. 当用户运行程序时,他从spinBox
(1-4(中选择值,并从comboBox
中选择值。并且每次按pushButton
标签文本都会更改,标签文本显示的逻辑
spinBox 值 = 1 且 combboBox = ITEM1, label_1->setText("label1 中的项目 1"(
spinBox 值 = 1 且 combboBox = ITEM2, label_1->setText("label1 中的项目 2"(
spinBox 值 = 1 且组合框 = ITEM3, label_1->setText("label1 中的项目 3"(
spinBox value = 1 and combboBox = ITEM4, label_1->setText("label1 中的项目 4"(
spinBox 值 = 2 且 comboBox = ITEM1, label_2->setText("label2 中的项目 1"(
spinBox 值 = 2 且组合框 = ITEM2, label_2->setText("label2 中的项目 2"(
spinBox 值 = 2 且 combboBox = ITEM3, label_2->setText("label2 中的项目 3"(
spinBox 值 = 2 且 combboBox = 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(按下按钮;再次从旋转框中选择第二个值(例如 2(从组合框中选择一个值(例如 TEXT2(按下按钮等...以填充所有 4 个标签中的数据。
即理论上,SpinBox 中的值是标签编号。
现在,我想确保如果应用程序重新启动应用程序的状态应该恢复,
即如何保存旋转框值和组合框值的组合???
可以使用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);
您需要保存:
- 映射
spinValue <-> comboText <-> LabelText
.在最简单的形式中,这是一个包含三列的表。 - 最后的
comboText
,最后的spinValue
。 - 可能是所有可能的旋转值,也可能是所有可能的组合文本。但这可以在阅读上表后推断出
因为你的逻辑是一个表,所以我不会用QSettings
来保存,而是用xml(或表文本文件(来保存。有一些资源可以使用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;
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 检查向量是否具有所有可能的字符组合
- 如何在加密++中将两个源组合成新的源
- 根中的组合
- 更改 C++ 中的组合分类变量
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 在QComboBox或QListWidget中设置所选元素的样式文本?
- 如何在QGridLayout中获取QComboBox的当前文本?
- 组合字符串不适用于 libCurl,C++
- 使用 QSettings保存 QSpinBox 和 QComboBox 的组合
- 鼠标按下QComboBox的插槽-如果用户单击组合框,则动态填充项目
- QComboBox:我们能让整个组合框都可以点击,而不仅仅是下拉按钮(箭头)本身吗