Сбой приложения виджета менеджера доступа к сети Qt

Я делаю приложение графического интерфейса, где я отправляю данные в свой веб-сервис и получаю ответ JSON. С помощью отладчика я обнаружил, что мне удается отправлять данные и получать ответ от моего сервера. Тем не менее, приложение вылетает, прежде чем значение изменяется в текстовом виде. Я преуспел, как только я изменил число массивов в AESEnkriptiraj на два, но даже тогда, спам кнопки вызвал бы сбой приложения. Проблема может быть в моем управлении потоками, но я не знаю, что это такое.

decryptionwindow.h

#ifndef DECRYPTIONWINDOW_H
#define DECRYPTIONWINDOW_H

#include <QWidget>
#include "QFile.h"
#include "qfiledialog.h"
#include "qtextstream.h"
#include "kriptiraj.h"


namespace Ui {
class DecryptionWindow;
}

class DecryptionWindow : public QWidget
{
    Q_OBJECT


public:
    explicit DecryptionWindow(QWidget *parent = 0);
    ~DecryptionWindow();

signals:

public slots:
    void AESkriptiranoVrati(QString Poruka);

private:

private slots:
    void on_btnFilePath_clicked();

    void on_btnKriptirajAES_clicked();

    void on_btnDekriptirajAES_clicked();

private:
    Ui::DecryptionWindow *ui;
};

#endif // DECRYPTIONWINDOW_H

decryptionWindow.cpp

    #include "decryptionwindow.h"
#include "ui_decryptionwindow.h"
#include <QTextCodec>



Kriptiraj *kriptiraj= new Kriptiraj();


DecryptionWindow::DecryptionWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DecryptionWindow)
{
    ui->setupUi(this);
    connect(kriptiraj, SIGNAL(Poruka(QString)), this, SLOT(AESkriptiranoVrati(QString)));

}

void DecryptionWindow::on_btnKriptirajAES_clicked()
{

    kriptiraj->AESEnkriptiraj(ui->txtSadrzajDatotekeAES->toPlainText(), ui->txtKljucAES->toPlainText(), "AES", "Kriptiraj");

}

void DecryptionWindow::AESkriptiranoVrati(QString poruka){
    ui->txtSadrzajDatotekeAES->setPlainText(poruka);

}

kriptiraj.h

    #ifndef KRIPTIRAJ_H
#define KRIPTIRAJ_H

#include <qobject.h>
#include <qnetworkaccessmanager.h>
#include <qthread.h>
#include <QtScript/qscriptengine>
#include <QtScript/QScriptValueIterator>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QEventLoop>
#include <QDebug>

class Kriptiraj : public QObject
{
    Q_OBJECT
public:

    explicit Kriptiraj();
    ~Kriptiraj();



signals:
    Nastavi();
    Poruka(QString);


public slots:


    void AESEnkriptiraj(QString tekst, QString kljuc, QString metoda, QString zahtjev);

    QString IzvuciPodatak(QNetworkReply* reply);


private:

    QNetworkAccessManager *networkManager;
private slots:



};



#endif // KRIPTIRAJ_H

kriptiraj.cpp

    #include "kriptiraj.h"

Kriptiraj::Kriptiraj()
{
    networkManager= new QNetworkAccessManager();
    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(IzvuciPodatak(QNetworkReply*)));

}

void Kriptiraj::AESEnkriptiraj(QString tekst, QString kljuc, QString metoda, QString zahtjev){


    QNetworkReply* Reply;
    QString url ="http://jospudjaatfoi.000webhostapp.com/OS2/AESenkripcija.php?tekst="+tekst+"&kljuc="+kljuc+"&metoda="+metoda+"&zahtjev="+zahtjev;
    QUrl Url(url);
    QNetworkRequest Request;
    Request.setUrl(Url);
    Reply = networkManager->get(Request);

}

QString Kriptiraj::IzvuciPodatak(QNetworkReply* reply){


    QString data = (QString) reply->readAll();
    //reply->deleteLater();
    QJsonDocument JSON= QJsonDocument::fromJson(data.toUtf8());
    QJsonObject JSONObject = JSON.object();
    QJsonValue JSONValue = JSONObject.value("result");


    QString link =JSONValue.toString();
    emit Poruka(link);


}



Kriptiraj::~Kriptiraj()
{


}

В основном у меня есть два соединения, один в инициализации окна расшифровки, а другой в инициализации криптиража. Код продолжается, когда я запускаю on_btnKriptirajAES_clicked(), которая запускает AESEnkriptiraj, который отправляет запрос get, который, когда завершает использование соединения, запускает IzvuciPodatak, который отправляет Poruka обратно в соединение decryptionwindow.cpp, которое запускает AESkriptiranoVrati. После этого он падает.

Извините за неправильное именование и другие практики, и извините за использование родного языка в моем коде в сочетании с английским.

0 ответов

Другие вопросы по тегам