Внешний вид сайта:

Qt5 - QSettings: Пример использования

Существует множество способов сохранения настроек приложений, написанных на C++. Однако в Qt для это предусмотрен специальный модуль — QSettings. Рассмотрим его использование на примере.

У вас есть виджет, позицию которого надо сохранить. Начинаем с того, что выведем его на экран (QTextEdit также позволяет отображать и редактировать текст):

#include <QApplication>
#include <QTextEdit>

int main( int argc, char* argv[] ) {
    QApplication a( argc, argv );
    QTextEdit edit;
    edit.show();

    return a.exec();
}

Следующим пунктом сохраняем позицию и содержимое виджета в файл настроек:

#include <QApplication>
#include <QTextEdit>
#include <QSettings>

int main( int argc, char* argv[] ) {
    QApplication a( argc, argv );
    QTextEdit edit;

    edit.show();
    int res = a.exec();

    QSettings settings( "settings_demo.conf", QSettings::IniFormat );
    settings.beginGroup( "WidgetPosition" );
    settings.setValue( "x", edit.x() );
    settings.setValue( "y", edit.y() );
    settings.setValue( "width", edit.width() );
    settings.setValue( "height", edit.height() );
    settings.endGroup();

    settings.beginGroup( "WidgetContent" );
    settings.setValue( "text", edit.toPlainText() );
    settings.endGroup();

    return res;
}

Настройки сохраняются в файле settings_demo.conf в формате ini. Содержимое файла выглядит следующим образом:

[WidgetPosition]
x=676
y=210
width=750
height=550

[WidgetContent]
text=Test

Чтобы восстановить настройки, выполним следующее:

#include <QApplication>
#include <QTextEdit>
#include <QSettings>

int main( int argc, char* argv[] ) {
    QApplication a( argc, argv );
    QTextEdit edit;

    QSettings settings( "settings_demo.conf", QSettings::IniFormat );

    settings.beginGroup( "WidgetPosition" );
    int x = settings.value( "x", -1 ).toInt();
    int y = settings.value( "y", -1 ).toInt();
    int width = settings.value( "width", -1 ).toInt();
    int height = settings.value( "height", -1 ).toInt();
    settings.endGroup();

    if( x > 0 && y > 0 && width > 0 && height > 0 ) {
        edit.setGeometry( x, y, width, height );
    }

    settings.beginGroup( "WidgetContent" );
    QString text = settings.value( "text", "" ).toString();
    settings.endGroup();

    edit.setText( text );

    edit.show();
    int res = a.exec();

    settings.beginGroup( "WidgetPosition" );
    settings.setValue( "x", edit.x() );
    settings.setValue( "y", edit.y() );
    settings.setValue( "width", edit.width() );
    settings.setValue( "height", edit.height() );
    settings.endGroup();

    settings.beginGroup( "WidgetContent" );
    settings.setValue( "text", edit.toPlainText() );
    settings.endGroup();

    return res;
}

Итак, получили готовую программу, которая сохраняет позицию и содержимое текстового виджета, а затем восстанавливает их при повторном запуске.

Комментарии

Нет комментариев. Ваш будет первым!