Реклама

Qt/C++ - Урок 003. QSettings или Как сохранить настройки приложения?

TutorialQtQSettings, QSettings example, QSettings пример, qt, Настройки, сохранение настроек794

Сохранение настроек Приложения - это одно из первых действий, которое изучают новички при работе с фреймворком Qt. Для этого используется класс QSettings, который позволяет сохранять настройки либо в реестр операционной системы, либо в текстовый файл. В данном уроке будет использован самый простой вариант - это сохранение настроек в реестр операционной системы. Для обеспечения наглядности работы сохранения настроек в данном уроке использовался проект из урока по QSystemTrayIcon .

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1 под Windows.

Структура проекта

Проект создается как Приложение Qt Widgets, в котором по умолчанию создаются файлы:

  • Settings.pro - профайл;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp - исходный код окна;
  • main.cpp - основной исходный файл, с которого стартует приложение;
  • mainwindow.ui - формочка основного окна приложения.

Примечание. Большую часть интерфейса создаю в дизайнере, чтобы не загромождать логику основного кода лишней информацией. По сути это лишь дело вкуса и привычки.

mainwindow.ui

Формочка для QSettings Program

Создаем формочку для теста, в которой будут использоваться два следующих объекта:

  • trayCheckBox - чекбокс для настройки поведения приложения;
  • saveButton - кнопка для выполнения сохранения настроек Приложения;

Settings.pro

По-прежнему в уроках не вносится изменений профайл проекта.

#-------------------------------------------------
#
# Project created by QtCreator 2015-08-12T09:31:45
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Settings
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

main.cpp

Данный файл подвергается изменениям, поскольку при запуске программы необходимо внести информацию о Приложении в реестр операционной системы.

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    /* Для адекватной регистрации приложения в операционной
     * необходимо установить название организации, домен организации,
     * а также название приложения.
     * Все настройки  будут храниться в операционной системе под этими
     * учетными данными приложения
     * */
    QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
    QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN);
    QCoreApplication::setApplicationName(APPLICATION_NAME);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h

Помимо методов и объектов, использованных в уроке по QSystemTrayIcon в данный файл необходимо внести Слот для обработки нажатия кнопки, в котором будет производиться сохранение настроек.

Также необходимо подключить в проект заголовочные файлы следующих классов:

  • QSettings;
  • QMessageBox;

И прописать директивы define, которые будут использоваться при работе с QSettings.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCloseEvent>
#include <QSystemTrayIcon>
#include <QAction>
#include <QSettings>
#include <QMessageBox>

/* Defining */
#define ORGANIZATION_NAME "EVILEG"
#define ORGANIZATION_DOMAIN "www.evileg.ru"
#define APPLICATION_NAME "QSettings Program"

#define SETTINGS_TRAY "settings/tray"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

////////////////// Методы из урока по QSystemTrayIcon
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void closeEvent(QCloseEvent * event);
/////////////////////////////////////////////////////

private slots:
    void iconActivated(QSystemTrayIcon::ActivationReason reason);

    /* Слот для кнопки, запускающей сохранение настроек приложения
     * */
    void on_saveButton_clicked();

private:
    Ui::MainWindow          * ui;
    QSystemTrayIcon         * trayIcon;
};

#endif // MAINWINDOW_H

mainwindow.cpp

В данном классе производится выполнение восстановления настроек приложения при инициализации внешнего вида главного окна, а также сохранение настроек по нажатию по кнопке saveButton.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle(APPLICATION_NAME);


    /* При создании главного окна производим установку начальных параметров
     * из настроек, сохранённых в операционной системе
     * */
    QSettings settings(ORGANIZATION_NAME, APPLICATION_NAME);
    /* Устанавливаем состояние чекбокса из настроек приложения по заданному ключу.
     * Если ключ не существует, то будет установлен параметр по умолчанию,
     * то есть false
     * */
    ui->trayCheckBox->setChecked(settings.value(SETTINGS_TRAY, false).toBool());

    /* Код из урока по работе с QSystemTrayIcon
     * */
   
    /* *** */
}

MainWindow::~MainWindow()
{
    delete ui;
}

/* Метод из урока по работе с QSystemTraiIcon
 * */
void MainWindow::closeEvent(QCloseEvent * event)
{
    /* *** */
}

/* Метод из урока по работе с QSystemTraiIcon
 * */
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
   /* *** */
}

/* Метод, который принимает сигнал нажатия кнопки
 * и выполняет сохранение настроек приложения
 * */
void MainWindow::on_saveButton_clicked()
{
    QSettings settings(ORGANIZATION_NAME, APPLICATION_NAME);
    /* Сохранение информации о включённости функции сворачивания
     * в трей производится в соответствии с состоянием чекбокса.
     * */
    if(ui->trayCheckBox->isChecked()){
        settings.setValue(SETTINGS_TRAY, true);
    } else {
        settings.setValue(SETTINGS_TRAY, false);
    }
    settings.sync();

    /* Диалоговое сообщение, которое сигнализирует об успешности
     * сохранения настроек
     * */
    QMessageBox::information(this,
                             trUtf8("Сохранение настроек"),
                             trUtf8("Сохранение настроек выполнено успешно"));
}

Итог по уроку QSettings

Сохранение настроек приложения с QSettings

При успешном написании кода из урока, при нажатии кнопки сохранения настроек, настройки сохранятся в реестр операционной системы.

А после перезапуска приложения настройки будут восстановлены. Если при сохранении настроек чекбокс был отмечен, то при запуске приложения он также будет отмечен. И приложение будет вести себя в соответствии с настройками.

@

Реклама

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама

Реклама