Como salvo variaveis em um arquivo automaticamente com JSON?



  • Boa tarde, estou precisando salvar minhas variaveis do menu q criei em um arquivo. Meu programa e' outro, ja esta praticamente finalizado, mas fiz outro programa simples e rapido pra testar um JSON. So' que, a maneira q eu estou salvando as variaveis editadas, e' com 2 botoes, um salvar e outro "abrir arquivo". Mas eu queria mesmo e' q meu programa fizesse isso sem eu precisar clicar em algum botao, apenas editando um QLabel ou um LineEdit, salvasse automaticamente com JSON. Aqui esta' meu codigo:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QTextStream>
    #include <QFileDialog>
    #include <QFile>
    #include <QStringList>
    #include <QJsonDocument>
    #include <QJsonObject>
    #include <QString>
    #include <QJsonValue>
    #include <QtMath>
    #include <QDebug>
    #include <QMessageBox>
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    QString numeric = "00000";
    int CursorPosition = 0;
    void MainWindow::keyPressEvent(QKeyEvent * event)
    {
        CursorPosition = ui->lineEdit->cursorPosition();
        if(event->key() == Qt::Key_Up || event->key() == Qt::Key_Down){
            // Se estiver no caracter nulo da String ou estiver em um delimitador, então anule a ação
            if(CursorPosition == numeric.count()) return;
            if(numeric.at(CursorPosition) == '.' ) return;
            // Quebrar IP String em segmentos de strings [0] 000 [1] 000 [2] 000 [3] 000
            int numericSplitted = numeric.at(CursorPosition).toLatin1() - '0';
            // Calculando as Posições
            const int sectionPos2 = CursorPosition ;
           // const int characterPos = CursorPosition % 4;
            // Selecionar a sentença e converter para Inteiro
            int numericNumber = (int)numericSplitted;
            // Subtrair ou Somar 10^posição
            if(event->key() == Qt::Key_Up){
                numericNumber += 1;
                if(numericNumber > 9) numericNumber = 9;
            }
            else{
                numericNumber -= 1;
                if(numericNumber < 0) numericNumber = 0;
            }
            // Inserir Nova Sentença de IP
            QString numericSentence;
            numeric.replace(sectionPos2, 1, numericSentence.sprintf("%d", numericNumber));
            // Inserir String no LineEdit e restaurando posição do Cursor
            const int restorePosition2 = CursorPosition;
            ui->lineEdit->setText(numeric);
            ui->lineEdit->setCursorPosition(restorePosition2);
            qDebug() << restorePosition2;
            qDebug() << sectionPos2;
        }
    }
    
    
    void MainWindow::on_salvarArquivo_PushButton_clicked()
    {
        QString json_filter = "JSON (*.json)";
        QString nome_arquivo = QFileDialog::getSaveFileName(this, tr("Salvar Arquivo"), "/",
                                                            tr("Qualquer arquivo (*);;%1").arg(json_filter),
                                                            &json_filter, QFileDialog::DontUseNativeDialog);
    
        if(nome_arquivo.isEmpty()){
    
        } else {
            QString valor5 = ui->lineEdit->text();
    
            QJsonDocument doc;
            QJsonObject obj;
    
            obj["valor5"] = valor5;
    
            doc.setObject(obj);
            QByteArray data_json = doc.toJson();
            QFile output(nome_arquivo);
            if (output.open(QIODevice::WriteOnly | QIODevice::Text)) {
                output.write(data_json);
                output.close();
                QMessageBox::information(this, tr("Mensagem"), tr("Documento salvo com sucesso!"));
            } else {
                QMessageBox::critical(this, tr("Erro"), output.errorString());
            }
        }
    }
    
    
    void MainWindow::on_abrirArquivo_PushButton_clicked()
    {
        QString json_filter = "JSON (*.json)";
        QString nome_arquivo = QFileDialog::getOpenFileName(this, tr("Abrir Arquivo"), "/",
                                                            tr("Qualquer arquivo (*);;%1").arg(json_filter),
                                                            &json_filter, QFileDialog::DontUseNativeDialog);
    
        if(nome_arquivo.isEmpty()){
    
        } else {
            QJsonDocument doc;
            QJsonObject obj;
            QByteArray data_json;
            QFile input(nome_arquivo);
            if (input.open(QIODevice::ReadOnly | QIODevice::Text)) {
                data_json = input.readAll();
                doc = doc.fromJson(data_json);
                obj = doc.object();
    
                QString valor5 = obj["valor5"].toString();
    
                ui->lineEdit->setText(valor5);
    
                QMessageBox::information(this, tr("Mensagem"), tr("Documento lido corretamente!"));
            } else {
                QMessageBox::critical(this, tr("Erro"), input.errorString());
            }
        }
    }
    
    

Log in to reply