U
Ulkiorra199214 марта 2018 г. 10:21
QSettings
Добрый день, есть задача сохранить значения из CheckBox, ComboBox, RadioButton, slider, в файл для того что бы можно было при повторном запуске приложения загрузить предыдущие настройки и продолжить работу, реализовал это следующим образом:
mainwindow.h
#pragma once #include <QMainWindow> #include <QSettings> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_Save_triggered(); void on_Load_triggered(); private: Ui::MainWindow *ui; };
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QToolTip> #include <QDateTime> #include <QFileDialog> #include <QCoreApplication> #include <QSlider> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_Save_triggered() { QDate date = QDate::currentDate(); // получаем текущую дату QTime time = QTime::currentTime(); // получаем текущее время /* записываем имя файла с настройками, qApp->applicationDirPath() - директория где лежит exe файл проекта * QString("/%0_%1.ini") - формируем имя файла в формате .ini специальный формат для хранения настроек * date.toString("dd-MM-yyyy") - дата - в формате день недели_месяц_год * time.toString("hh-mm") - время в формате часы_минуты_секунды */ QString fileName = qApp->applicationDirPath().append( QString("/%0_%1.ini").arg(date.toString("dd-MM-yyyy")).arg(time.toString("hh-mm"))); QSettings settings(fileName, QSettings::IniFormat); settings.beginGroup("checkBox"); settings.setValue("checkBox_1", ui->checkBox->isChecked()); settings.setValue("checkBox_2", ui->checkBox_2->isChecked()); settings.setValue("checkBox_3", ui->checkBox_3->isChecked()); settings.setValue("checkBox_4", ui->checkBox_4->isChecked()); settings.setValue("checkBox_5", ui->checkBox_5->isChecked()); settings.setValue("checkBox_6", ui->checkBox_6->isChecked()); settings.endGroup(); settings.beginGroup("slider"); settings.setValue("horizontalSlider", ui->horizontalSlider->value()); settings.endGroup(); } void MainWindow::on_Load_triggered() { // создаем переменную fileName куда запишется путь до выбранного нами файла QString fileName = QFileDialog::getOpenFileName(0, "Open", "/", ""); QSettings settings(fileName, QSettings::IniFormat); settings.beginGroup("checkBox"); /* присваваем checkBox значение считанное из файла для этого указываем "ключ" т.е. имя "checkBox_1" * далее после запятой пишем значение по умолчанию, на случай если не будет считано значение из файла "false" * далее указываем тип значения .toBool() т.е. получаем значения true или false. */ ui->checkBox->setChecked(settings.value("checkBox_1", false).toBool()); ui->checkBox_2->setChecked(settings.value("checkBox_2", false).toBool()); ui->checkBox_3->setChecked(settings.value("checkBox_3", false).toBool()); ui->checkBox_4->setChecked(settings.value("checkBox_4", false).toBool()); ui->checkBox_5->setChecked(settings.value("checkBox_5", false).toBool()); ui->checkBox_6->setChecked(settings.value("checkBox_6", false).toBool()); settings.endGroup(); // вот пример со слайдером тип значения для него .toInt() settings.beginGroup("slider"); ui->horizontalSlider->setValue(settings.value("horizontalSlider", 0).toInt()); settings.endGroup(); }
я все сохраняю через QSettings, но на форме будет до 100 элементов, и интересно, возможно как то оптимизировать код, что бы не было 100 строчек для записи и 100 строчек для чтения из файла
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 22:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 8:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 8:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
ИМ
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 ноября 2024 г. 19:51
Evgenii Legotckoi31 октября 2024 г. 21:37
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5 октября 2024 г. 14:51
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi24 июня 2024 г. 22:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 ноября 2024 г. 14:04
NSProject4 июня 2022 г. 10:49
IscanderChe31 октября 2024 г. 22:43
Добрый день!
ммм... у Вас 11-й стандарт C++ не поддерживается. Это конструкция использует initializer_list.
спасибо)