Das Speichern von Anwendungseinstellungen ist einer der ersten Schritte, die Anfänger bei der Arbeit mit dem Qt-Framework lernen. Dazu wird die Klasse QSettings verwendet, mit der Sie Einstellungen entweder in der Betriebssystem-Registry oder in einer Textdatei speichern können. In dieser Lektion wird die einfachste Option verwendet - das Speichern der Einstellungen in der Registrierung des Betriebssystems. Um die Sichtbarkeit der Arbeit zum Speichern der Einstellungen in dieser Lektion zu gewährleisten, haben wir das Projekt aus der Lektion auf QSystemTrayIcon verwendet.
Der Programmcode wurde in QtCreator 3.3.1 basierend auf Qt 5.4.1 unter Windows geschrieben.
Projektstruktur
Das Projekt wird als Qt Widgets-Anwendung erstellt, in der die Dateien standardmäßig erstellt werden:
- Settings.pro - Profil;
- mainwindow.h - Header-Datei des Hauptanwendungsfensters;
- mainwindow.cpp - Fensterquellcode;
- main.cpp - die Hauptquelldatei, von der aus die Anwendung startet;
- mainwindow.ui - die Form des Hauptanwendungsfensters.
Notiz. Ich erstelle den größten Teil der Benutzeroberfläche im Designer, um die Logik des Hauptcodes nicht mit unnötigen Informationen zu überladen. Tatsächlich ist dies nur eine Frage des Geschmacks und der Gewohnheit.
mainwindow.ui
Form für das QSettings-Programm Erstellen Sie eine Form für den Teig, die die folgenden beiden Objekte verwendet:
- trayCheckBox - Kontrollkästchen zum Einstellen des Anwendungsverhaltens;
- saveButton - Schaltfläche zum Speichern der Anwendungseinstellungen;
Einstellungen.pro
Die Lektionen ändern immer noch nicht das Projektprofil.
#------------------------------------------------- # # 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
Diese Datei unterliegt Änderungen, da beim Starten des Programms Informationen über die Anwendung in die Registrierung des Betriebssystems eingegeben werden müssen.
#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
Zusätzlich zu den in der Lektion verwendeten Methoden und Objekten auf QSystemTrayIcon muss diese Datei mit einem Slot zur Verarbeitung eines Schaltflächenklicks gefüllt werden, in dem die Einstellungen wird gespeichert.
Außerdem ist es notwendig, die Header-Dateien der folgenden Klassen in das Projekt einzubinden:
- QEinstellungen;
- QMessageBox;
Und schreiben Sie die Define-Direktiven, die bei der Arbeit mit QSettings verwendet werden.
#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
Diese Klasse wird verwendet, um die Anwendungseinstellungen beim Initialisieren des Erscheinungsbilds des Hauptfensters wiederherzustellen, sowie die Einstellungen durch Klicken auf den saveButton zu speichern.
#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("Сохранение настроек выполнено успешно")); }
Zusammenfassung der QSettings-Lektion
Anwendungseinstellungen mit QSettings speichern Wenn Sie den Code aus der Lektion erfolgreich geschrieben haben, werden die Einstellungen beim Klicken auf die Schaltfläche Einstellungen speichern in der Betriebssystemregistrierung gespeichert.
Und nach dem Neustart der Anwendung werden die Einstellungen wiederhergestellt. Wenn das Kontrollkästchen beim Speichern der Einstellungen aktiviert wurde, wird es auch beim Starten der Anwendung aktiviert. Und die Anwendung verhält sich gemäß den Einstellungen.
Зачем мы добавляли pushButton, если она не используется нигде. Метод on_saveButton_clicked() аналогично нигде не используется и как сигнал не передается?
Вот сразу понятно, что Вы первый день в Qt разработке ))) Ничего плохого не имею ввиду )))
on_saveButton_clicked() - это слот, созданный через Qt Designer, в каких-то статьях я уже это пояснял. Не вижу смысла в каждой статье это объяснять. Такие слоты подключаются при сборке через автоматически генерируемые ui хедеры, поэтому pushButton подключён прямо к этому слоту. Так что всё работает.