Опубликован: 07.03.2015 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания ALT Linux

Лекция 15: Разработка приложений с графическим интерфейсом

15.7 Сохранение настроек

Для сохранения настроек в программе мы воспользуемся классом QSettings. Он позволяет сохранять настройки программы стандартным для программной платформы способом. В ОС Linux и Mac OS X это конфигурационные файлы (.ini и. .plist), а под управлением ОС Windows настройки программы можно сохранять в системный реестр. Также класс QSettings часто используют для редактирования произвольных. .ini и .plist файлов и ключей системного реестра Windows.

Чтобы добавить поддержку сохранения настроек в программе объявим несколько дополнительных методов.

private slots :
	void slotPreferencesAccepted ( );
private :
	void readsettings ( );
	void writesettings ( );
	void applysettings ( );

Метод readSettings будет читать настройки программы и инициализировать настройками наш диалог. Метод writeSettings будет читать настройки, установленные в диалоге, и записывать их. Наконец метод applySettings будет получать текущие настройки от диалога и настраивать соответствующим образом программу.

void MainWindow::read settings ( )
{
//Указываем, где хранились настройки. QSettings::NativeFormat — в формате определенном
	системой
//QSettings::UserScope — настройки для каждого пользователя отдельно.
//Также устанавливаем имя организации и название программы
	Qsettings lsettings ( Qsettings::NativeFormat, Qsettings::UserScope, " ", qApp
	->ApplicationName ( ) );
//Открываем группу настроек
	lsettings.beg inGroup (SETTINGS_GROUP_VIEW);
//Читаем настройки
	bool lShowToolBar= lsettings.value (SETTING_SHOW_TOOLBAR, true ).toBool ( );
	msettingsDialog->setShowToolBar ( lShowToolBar );
	bool lShowStatusBar = lsettings.value (SETTING_SHOW_STATUS_BAR, true ).toBool
	( );
	msettingsDialog->s etShowStatusBar ( lShowStatusBar );
}
void MainWindow::write settings ( )
{
//Указываем как сохранять настройки. QSettings::NativeFormat — в формате определенном
	системой
//QSettings::UserScope — настройки для каждого пользователя отдельно.
//Также устанавливаем имя организации и название программы.
	Qsettings lSettings ( Qsettings::Nat iveFormat, Qset t i n gs::UserScope, " ", qApp
	->ApplicationName ( ) );
//Открываем группу настроек
	lSettings.beg inGroup (SETTINGS_GROUP_VIEW);
//Записываем настройки
	lSettings.setvalue (SETTING_SHOW_TOOLBAR, msettingsDialog->isShowToolBar ( ) );
	lSettings.setvalue (SETTING_SHOW_STATUS_BAR, mSettingsDialog ->
	isShowStatusBar ( ) );
}
void MainWindow::applysettings ( )
{
//Читаем настройки установленые в диалоге и применяем их
	ui->mainToolBar->setVisible ( msettingsDialog ->isShowToolBar ( ) );
	ui->statusBar->setVisible ( msettingsDialog ->isShowStatusBar ( ) );
}

Модифицируем также метод showPreferencesDialog, чтобы он вызывал считывание настроек. Также добавим реализацию метода slotPreferencesAccepted.

void MainWindow::showPreferencesDialog ( )
{
	readSettings ( ); //Считываем настройки и устанавливаем их для диалога
	mSettingsDialog->show ( ); //Показываем диалог настроек
}
void MainWindow::slotPreferencesAccepted ( )
{
	writeSettings ( ); //Записать новые настройки
	applySettings ( ); //Применить настройки
}

В конструкторе главного окна соединим сигнал accepted от диалога к слоту slotPreferencesAccepted: connect(mSettingsDialog, SIGNAL(accepted()), this, SLOT (slotPreferencesAccepted()), Qt::UniqueConnection);

Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?