将QCheckBox的状态保存在文件中,并在程序重新启动时加载状态

Save the state of QCheckBox in file, and load the state when program restarts

本文关键字:状态 程序 重新启动 加载 QCheckBox 保存 存在 文件      更新时间:2023-10-16

在我的GUI应用程序中,我的主窗口中有一些标签,标签的可见性是通过按下按钮(设置)时打开的对话框中的复选框控制的。现在,一切正常,即如果我打开设置对话框,我可以选中或取消选中复选框;因此,标签也被设置为可见或不可见。

我的设置对话框.cpp

void mysettingsdialog::onclick(bool checked)      //by AJ kpi conf
{
    if(myCheckBox->isChecked()==true)
    {
        emit setlabelvisible();
    }
    else
    {
        emit setlabelinvisible();
    }
}

主窗口.cpp

MySettingsDialog* myset=new MySettingsDialog(this);
connect(myset,SIGNAL(setlabelvisible()),this,SLOT(enable1()));          
connect(myset,SIGNAL(setlabelinvisible()),this,SLOT(disable1()));
void MainWindow::enable1()      
{
    ui->label->setVisible(true);
    qDebug()<<"VISIBLE label";
}
void MainWindow::disable1()     
{
    ui->label->setVisible(false);
    qDebug()<<"INVISIBLE label";
}

现在的问题是,每次我的应用程序重新启动时,它都不会保留复选框的先前状态。所以我正在考虑将复选框的状态保存在变量中并将其写入文件,因此每当我的应用程序启动时,它都会读取文件并相应地设置复选框的状态。

我的问题是,如何将复选框的"状态"存储在变量中并将其写入文件。并再次使用相同的方法来设置复选框的状态???

我的意思是从 QLabels 和 QLineEdit 的文件读取/写入值很容易,但我对如何使用复选框执行此操作感到困惑。

  1. 创建一个容器来存储每个复选框的指针。
  2. 创建另一个容器来存储每个复选框的"状态"。对于二进制复选框,可以使用isChecked()查询是否选中了复选框。否则,如果使用三态复选框,则可以调用 checkState() 将状态作为枚举返回(请参阅编辑)。
  3. 加载设置时,请相应地为每个复选框分配状态。

  4. 您可以使用QSettings来管理设置并将其另存为 ini 文件。


编辑

只需提及有一个三态复选框的选项。从文档中:

QCheckBox选择性地提供第三种状态来指示"无更改"。 每当您需要为用户提供以下选项时,这很有用 既不选中也不取消选中复选框。如果你需要这第三个 状态,使用 setTristate() 启用它,并使用 checkState() 查询 当前切换状态。