Как передать значение из реестра

164
24 апреля 2019, 01:40

У меня есть виджет строкового поля. Как сделать, чтобы сохранялся текст этой строки и передавался в реестр, чтобы потом можно было загрузить сохранённый текст данной строки.

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSettings>
#include "counter2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    Ui::MainWindow* ui;
    counter2*       counter_2;
    counter2*       counter_3;
    QSettings*      settings;
public:
    void save();
    void load();

//signals:
//    void toggleToCounter2();
private slots:
        //Diclaration slots'
    void cleanLines();
    void cleanAmounters();
    void cleanAll();
    void toggleCounter3();
    void toggleCounter4();
    void toggleCounter5();
    void toggleCounter6();
    void toggleWindow2();
    void toggleWindow3();
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "counter2.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    counter_2 = new counter2();
    counter_3 = new counter2();
    settings = new QSettings("SimpleStudio", "Counter", this);
    //Diclaration variables & QObject::connect
    connect(counter_2, &counter2::toggleToCounter1,
            this,      &MainWindow::show);
    connect(counter_3, &counter2::toggleToCounter1,
            this,      &MainWindow::show);
    connect(counter_2, &counter2::toggleToCounter3,
            this,      &MainWindow::toggleWindow3);
    QObject::connect(ui->toggleButton2, SIGNAL(clicked()),
                      this,     SLOT(toggleWindow2()));
    QObject::connect(ui->toggleButton3, SIGNAL(clicked()),
                      this,     SLOT(toggleWindow3()));
    QObject::connect(ui->cleanLines, SIGNAL(clicked()),
                     this,           SLOT(cleanLines()));
    QObject::connect(ui->cleanAmounts, SIGNAL(clicked()),
                     this,             SLOT(cleanAmounters()));
    QObject::connect(ui->cleanAll, SIGNAL(clicked()),
                     this,         SLOT(cleanAll()));
    QObject::connect(ui->checkBox3, SIGNAL(clicked()),
                     this,          SLOT(toggleCounter3()));
    QObject::connect(ui->checkBox4, SIGNAL(clicked()),
                     this,          SLOT(toggleCounter4()));
    QObject::connect(ui->checkBox5, SIGNAL(clicked()),
                     this,          SLOT(toggleCounter5()));
    QObject::connect(ui->checkBox6, SIGNAL(clicked()),
                     this,          SLOT(toggleCounter6()));
//    load();
}

MainWindow::~MainWindow()
{
    delete ui;
    save();
}
//Discription slots'
void MainWindow::save() {
    ui->nameCounter1->setText(settings->setValue("nameString1", ui->nameCounter1->text()));
}
void MainWindow::load() {
    ui->nameCounter1->setText(settings->value("nameString1").toString());
}
void MainWindow::cleanLines() {
    ui->nameCounter1->clear();
    ui->nameCounter2->clear();
    ui->nameCounter3->clear();
    ui->nameCounter4->clear();
    ui->nameCounter5->clear();
    ui->nameCounter6->clear();
}
void MainWindow::cleanAmounters() {
    ui->amounter1->setValue(0);
    ui->amounter2->setValue(0);
    ui->amounter3->setValue(0);
    ui->amounter4->setValue(0);
    ui->amounter5->setValue(0);
    ui->amounter6->setValue(0);
}
void MainWindow::cleanAll() {
    ui->nameCounterTop->clear();
    ui->checkBox3->setChecked(0);
    emit MainWindow::toggleCounter3();
    ui->checkBox4->setChecked(0);
    emit MainWindow::toggleCounter4();
    ui->checkBox5->setChecked(0);
    emit MainWindow::toggleCounter5();
    ui->checkBox6->setChecked(0);
    emit MainWindow::toggleCounter6();
    emit MainWindow::cleanLines();
    emit MainWindow::cleanAmounters();
}
void MainWindow::toggleCounter3(){
    if(!ui->checkBox3->isChecked()) {
        ui->amounter3->setEnabled(0);
        ui->nameCounter3->setEnabled(0);
    } else {
        ui->amounter3->setEnabled(1);
        ui->nameCounter3->setEnabled(1);
    }
}
void MainWindow::toggleCounter4(){
    if(!ui->checkBox4->isChecked()) {
        ui->amounter4->setEnabled(0);
        ui->nameCounter4->setEnabled(0);
    } else {
        ui->amounter4->setEnabled(1);
        ui->nameCounter4->setEnabled(1);
    }
}
void MainWindow::toggleCounter5(){
    if(!ui->checkBox5->isChecked()) {
        ui->amounter5->setEnabled(0);
        ui->nameCounter5->setEnabled(0);
    } else {
        ui->amounter5->setEnabled(1);
        ui->nameCounter5->setEnabled(1);
    }
}
void MainWindow::toggleCounter6(){
    if(!ui->checkBox6->isChecked()) {
        ui->amounter6->setEnabled(0);
        ui->nameCounter6->setEnabled(0);
    } else {
        ui->amounter6->setEnabled(1);
        ui->nameCounter6->setEnabled(1);
    }
}
void MainWindow::toggleWindow2() {
        counter_2->show();
        this->close();
}
void MainWindow::toggleWindow3() {
        counter_3->show();
        this->close();
}
//void counter2::toggleWindow3() {
//    counter_2->close();
//    counter_3->show();
//}

Ошибка: mainwindow.cpp:64: ошибка: reference to type 'const QString' could not bind to an rvalue of type 'void'

Answer 1

В Qt за работу с реестром отвечает класс QSettings:

// Открываем ключ реестра (как бы папку).
// Если компилятор выдаёт ошибку на строку ниже, замените Registry32Format
// на RegistryFormat.
QSettings reg("путь до ключа", QSettings::Registry32Format);
// Записываем значение текстового поля linewidget в реестр
reg.setValue("имя значения", linewidget.value());
// Читаем значение из реестра в текстовое поле linewidget 
linewidget.setValue(reg.getValue("имя значения").toString());

Вообще, он может работать не только с реестром, но и с файлами конфигурации, но в данном случае мы направляем его именно на реестр.

Answer 2

У Вас даже тег settings стоит, надо было это же слово в документации Qt вбить.

Вам нужен класс QSettings, в Windows он как раз с реестром работает. Там же по ссылке есть пример работы с этим классом.

READ ALSO
Как узнать, что окно открыто?

Как узнать, что окно открыто?

Какой метод отвечает за проверку открытия окна?

153
Как исправить кодировку при чтении .properties файла?

Как исправить кодировку при чтении .properties файла?

Есть класс который подтягиват данные из файла css-selectorproperties, но кириллические символы лоомаются превращаясь в иероглифы

157
Вылетает org.hibernate.LazyInitializationException

Вылетает org.hibernate.LazyInitializationException

Модель мини магазина

245