В дополнение к предоставленным ответам, предлагающим использовать QSettings, я буду бесстыдно скопировать собственный пример Qt из документации (хотя я немного отредактировал его).
Вот функции для чтения и записи настроек из файла/ Registry / что угодно:
void MainWindow::readSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(400, 400)).toSize()); // note the 400x400 defaults if there is no saved settings yet
move(settings.value("pos", QPoint(200, 200)).toPoint()); // here default pos is at 200,200
settings.endGroup();
}
void MainWindow::writeSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
}
Функцию readSettings()
можно вызвать из конструктора MainWindow:
MainWindow::MainWindow()
{
...
readSettings();
}
, а writeSettings()
из обработчика события закрытия:
void MainWindow::closeEvent(QCloseEvent *event)
{
writeSettings();
event->accept();
}
И последнее, но не менее важное: обратите внимание, что формат настроек может быть другим.Например, если вы хотите, чтобы настройки сохранялись в реестре в Windows, вы должны передать конструктору QSettings::NativeFormat
, но если вы хотите ввести текстовую конфигурацию в %appdata%
, вместо этого введите QSettings::IniFormat
.В приведенном выше примере формат не передается, поэтому он является стандартным по умолчанию.
Мое личное предпочтение - установить IniFormat
для Windows (поскольку данные реестра нелегко переносить) и NativeFormat
для Linux и macOS, вот так:
QSettings *settings;
if ( (os == "Linux") | (os == "macOS") ) {
settings = new QSettings(QSettings::NativeFormat, QSettings::UserScope, "Moose Soft", "Clipper");
} else {
settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "Moose Soft", "Clipper");
};