Сбой приложения виджета менеджера доступа к сети 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. После этого он падает.
Извините за неправильное именование и другие практики, и извините за использование родного языка в моем коде в сочетании с английским.