Сохраните состояние QCheckBox в файле и загрузите состояние при перезапуске программы.

В моем приложении с графическим интерфейсом у меня есть несколько меток в моем главном окне, видимость меток контролируется с помощью флажков в диалоговом окне, которое открывается при нажатии кнопки (настройки). Теперь все работает нормально, т.е. если я открою диалоговое окно настроек, я могу установить или снять флажки; следовательно, метки также устанавливаются видимыми или невидимыми.

mysettingsdialog.cpp

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

mainwindow.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 и QLineEdits достаточно просто, но я не понимаю, как это сделать с флажком.


person RicoRicochet    schedule 30.01.2015    source источник
comment
Как указал Тэй, состояние флажка — это просто bool. Чтобы сохранить его в файле, вы можете static_cast преобразовать его в целое число, в результате чего 1 будет истинным, а 0 - ложным.   -  person Bowdzone    schedule 30.01.2015
comment
@Bowdzone Просто упомяните, что есть флажок tri-state, поэтому состояние флажка не всегда равно bool. Взгляните на мое редактирование для более подробной информации.   -  person Tay2510    schedule 30.01.2015


Ответы (1)


  1. Создайте контейнер для хранения указателя каждого флажка.
  2. Создайте еще один контейнер для хранения «состояния» каждого флажка. Для двоичного флажка вы можете использовать isChecked(), чтобы запросить, или не установлен флажок. В противном случае вы можете вызвать checkState(), чтобы вернуть состояние в виде перечисления, если вы используете флажок с тремя состояниями (см. редактирование).
  3. При загрузке настроек назначьте состояние каждому флажку соответствующим образом.

  4. Вы можете использовать QSettings для управления настройками и сохранения их как ini файл.


Редактировать

Просто упомяните, что есть опция для флажка с тремя состояниями. Из документа:

QCheckBox дополнительно предоставляет третье состояние, указывающее "без изменений". Это полезно, когда вам нужно дать пользователю возможность ни устанавливать, ни снимать флажок. Если вам нужно это третье состояние, включите его с помощью setTristate() и используйте checkState() для запроса текущего состояния переключения.

person Tay2510    schedule 30.01.2015
comment
хорошо, прошел через QSettings, я думаю, что использование qsettings будет лучше для моего приложения.. спасибо.. - person RicoRicochet; 30.01.2015