That's why I add NetworkReply(const NetworkReply &); (if I don't understand everything, it's because I don't often speak English, sorry)
The problem is really when I try to use a custom QObject in other via QScript
I try to add minimal example but I don't compile it :
#ifndef NETWORKREQUEST_H
#define NETWORKREQUEST_H
#include <QObject>
#include <QScriptEngine>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
class NetworkRequestRegister
{
public:
static void Register(QScriptEngine *engine);
};
class NetworkRequest
: public QObject{
Q_OBJECT
public:
explicit NetworkRequest
(QUrl url,
QObject *parent
= 0);
NetworkRequest(const NetworkRequest &);
virtual ~NetworkRequest();
QNetworkRequest getRequest() { return request; }
private:
QNetworkRequest request;
};
class NetworkReply;
class NetworkManager
: public QObject{
Q_OBJECT
public:
explicit NetworkManager
(QObject *parent
= 0);
NetworkManager(const NetworkRequest &);
virtual ~NetworkManager();
QNetworkReply *Qget(NetworkRequest request);
Q_INVOKABLE NetworkReply get(NetworkRequest request);
private:
QNetworkAccessManager manager;
};
class NetworkReply
: public QObject{
Q_OBJECT
public:
explicit NetworkReply
(QNetworkReply
*par_reply,
QObject *parent
= 0);
NetworkReply(const NetworkReply &);
virtual ~NetworkReply();
NetworkReply &operator =(const NetworkReply &);
private:
QNetworkReply *reply;
};
Q_SCRIPT_DECLARE_QMETAOBJECT
(NetworkReply,
QObject*);
Q_DECLARE_METATYPE(NetworkReply)
Q_DECLARE_METATYPE(NetworkReply*)
QScriptValue NetworkReplyToScriptValue(QScriptEngine *engine, NetworkReply* const &in);
void NetworkReplyFromScriptValue(const QScriptValue &object, NetworkReply* &out);
Q_DECLARE_METATYPE(NetworkRequest*)
QScriptValue NetworkRequestToScriptValue(QScriptEngine *engine, NetworkRequest* const &in);
void NetworkRequestFromScriptValue(const QScriptValue &object, NetworkRequest* &out);
#endif // NETWORKREQUEST_H
#ifndef NETWORKREQUEST_H
#define NETWORKREQUEST_H
#include <QObject>
#include <QScriptEngine>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
class NetworkRequestRegister
{
public:
static void Register(QScriptEngine *engine);
};
class NetworkRequest : public QObject
{
Q_OBJECT
public:
explicit NetworkRequest(QUrl url, QObject *parent = 0);
NetworkRequest(const NetworkRequest &);
virtual ~NetworkRequest();
QNetworkRequest getRequest() { return request; }
private:
QNetworkRequest request;
};
class NetworkReply;
class NetworkManager : public QObject
{
Q_OBJECT
public:
explicit NetworkManager(QObject *parent = 0);
NetworkManager(const NetworkRequest &);
virtual ~NetworkManager();
QNetworkReply *Qget(NetworkRequest request);
Q_INVOKABLE NetworkReply get(NetworkRequest request);
private:
QNetworkAccessManager manager;
};
class NetworkReply : public QObject
{
Q_OBJECT
public:
NetworkReply(QObject *parent = 0);
explicit NetworkReply(QNetworkReply *par_reply, QObject *parent = 0);
NetworkReply(const NetworkReply &);
virtual ~NetworkReply();
NetworkReply &operator =(const NetworkReply &);
private:
QNetworkReply *reply;
};
Q_SCRIPT_DECLARE_QMETAOBJECT(NetworkReply, QObject*);
Q_DECLARE_METATYPE(NetworkReply)
Q_DECLARE_METATYPE(NetworkReply*)
QScriptValue NetworkReplyToScriptValue(QScriptEngine *engine, NetworkReply* const &in);
void NetworkReplyFromScriptValue(const QScriptValue &object, NetworkReply* &out);
Q_DECLARE_METATYPE(NetworkRequest*)
QScriptValue NetworkRequestToScriptValue(QScriptEngine *engine, NetworkRequest* const &in);
void NetworkRequestFromScriptValue(const QScriptValue &object, NetworkRequest* &out);
#endif // NETWORKREQUEST_H
To copy to clipboard, switch view to plain text mode
#include <math.h>
#include "networkrequest.h"
QScriptValue createNetworkRequest(QScriptContext *context, QScriptEngine *engine)
{
if(par_context->argumentCount() != 1 && context->argument(0).isString())
{
return engine->nullValue();
}
NetworkRequest
*loc_request
= new NetworkRequest
(QUrl(context
->argument
(0).
toString()), engine
);
return par_engine->newQObject(request);
}
QScriptValue createNetworkManager(QScriptContext *context, QScriptEngine *engine)
{
if(par_context->argumentCount() != 0)
{
return engine->nullValue();
}
NetworkManager *manager = new NetworkManager(engine);
return engine->newQObject(manager);
}
QScriptValue NetworkRequestToScriptValue(QScriptEngine *engine, NetworkRequest* const &in) { return engine->newQObject(in); }
void NetworkRequestFromScriptValue(const QScriptValue &object, NetworkRequest* &out) { out = qobject_cast<NetworkRequest*>(object.toQObject()); }
QScriptValue NetworkReplyToScriptValue(QScriptEngine *engine, NetworkReply* const &in) { return engine->newQObject(in); }
void NetworkReplyFromScriptValue(const QScriptValue &object, NetworkReply* &out) { out = qobject_cast<NetworkReply*>(object.toQObject()); }
QScriptValue NetworkReplyToScriptValue2
(QScriptEngine
*engine, NetworkReply
const &in
) { return engine
->newQObject
((QObject *)&in
);
}void NetworkReplyFromScriptValue2(const QScriptValue &object, NetworkReply &out) { out = (NetworkReply)(object.toQObject()); }
QScriptValue createNetworkReply(QScriptContext *context, QScriptEngine *engine)
{
if(context->argumentCount() != 0)
{
return engine->nullValue();
}
NetworkReply *manager = new NetworkReply(engine);
return engine->newQObject(manager);
}
void NetworkRequestRegister::Register(QScriptEngine *engine)
{
par_engine->globalObject().setProperty("NetworkRequest", engine->newFunction(createNetworkRequest));
par_engine->globalObject().setProperty("NetworkManager", engine->newFunction(createNetworkManager));
par_engine->globalObject().setProperty("NetworkReply", engine->newFunction(createNetworkReply));
qScriptRegisterMetaType(engine, NetworkReplyToScriptValue, NetworkReplyFromScriptValue);
qScriptRegisterMetaType(engine, NetworkReplyToScriptValue2, NetworkReplyFromScriptValue2);
qScriptRegisterMetaType(engine, NetworkRequestToScriptValue, NetworkRequestFromScriptValue);
}
NetworkRequest
::NetworkRequest(QUrl url,
QObject *parent
) : request(QNetworkRequest(url))
{
}
NetworkRequest::NetworkRequest(const NetworkRequest &request)
{
m_request = par_request.request;
}
NetworkRequest::~NetworkRequest()
{
file->close();
delete file;
}
NetworkReply
::NetworkReply(QNetworkReply
*reply,
QObject *parent
) : QObject(parent
){
reply = reply;
qDebug
(QString("Network Reply > cannot open reply IO Device").
toLatin1());
}
{
}
NetworkReply::NetworkReply(const NetworkReply &reply)
{
reply = reply.reply;
}
NetworkReply::~NetworkReply()
{
//reply->close();
//delete reply;
}
NetworkReply &NetworkReply::operator =(const NetworkReply &reply)
{
return NetworkReply(reply);
}
NetworkManager
::NetworkManager(QObject *parent
) : QObject(parent
), manager
(QNetworkAccessManager
(parent
)){
}
NetworkManager::~NetworkManager()
{
}
QNetworkReply *NetworkManager::Qget(NetworkRequest request)
{
return m_manager.get(request.getRequest());
}
NetworkReply NetworkManager::get(NetworkRequest request)
{
return NetworkReply(m_manager.get(request.getRequest()), parent());
}
#include <math.h>
#include "networkrequest.h"
QScriptValue createNetworkRequest(QScriptContext *context, QScriptEngine *engine)
{
if(par_context->argumentCount() != 1 && context->argument(0).isString())
{
return engine->nullValue();
}
NetworkRequest *loc_request = new NetworkRequest(QUrl(context->argument(0).toString()), engine);
return par_engine->newQObject(request);
}
QScriptValue createNetworkManager(QScriptContext *context, QScriptEngine *engine)
{
if(par_context->argumentCount() != 0)
{
return engine->nullValue();
}
NetworkManager *manager = new NetworkManager(engine);
return engine->newQObject(manager);
}
QScriptValue NetworkRequestToScriptValue(QScriptEngine *engine, NetworkRequest* const &in) { return engine->newQObject(in); }
void NetworkRequestFromScriptValue(const QScriptValue &object, NetworkRequest* &out) { out = qobject_cast<NetworkRequest*>(object.toQObject()); }
QScriptValue NetworkReplyToScriptValue(QScriptEngine *engine, NetworkReply* const &in) { return engine->newQObject(in); }
void NetworkReplyFromScriptValue(const QScriptValue &object, NetworkReply* &out) { out = qobject_cast<NetworkReply*>(object.toQObject()); }
QScriptValue NetworkReplyToScriptValue2(QScriptEngine *engine, NetworkReply const &in) { return engine->newQObject((QObject *)&in); }
void NetworkReplyFromScriptValue2(const QScriptValue &object, NetworkReply &out) { out = (NetworkReply)(object.toQObject()); }
QScriptValue createNetworkReply(QScriptContext *context, QScriptEngine *engine)
{
if(context->argumentCount() != 0)
{
return engine->nullValue();
}
NetworkReply *manager = new NetworkReply(engine);
return engine->newQObject(manager);
}
void NetworkRequestRegister::Register(QScriptEngine *engine)
{
par_engine->globalObject().setProperty("NetworkRequest", engine->newFunction(createNetworkRequest));
par_engine->globalObject().setProperty("NetworkManager", engine->newFunction(createNetworkManager));
par_engine->globalObject().setProperty("NetworkReply", engine->newFunction(createNetworkReply));
qScriptRegisterMetaType(engine, NetworkReplyToScriptValue, NetworkReplyFromScriptValue);
qScriptRegisterMetaType(engine, NetworkReplyToScriptValue2, NetworkReplyFromScriptValue2);
qScriptRegisterMetaType(engine, NetworkRequestToScriptValue, NetworkRequestFromScriptValue);
}
NetworkRequest::NetworkRequest(QUrl url, QObject *parent) :
QObject(parent),
request(QNetworkRequest(url))
{
}
NetworkRequest::NetworkRequest(const NetworkRequest &request)
{
m_request = par_request.request;
}
NetworkRequest::~NetworkRequest()
{
file->close();
delete file;
}
NetworkReply::NetworkReply(QNetworkReply *reply, QObject *parent) : QObject(parent)
{
reply = reply;
if(!reply->open(QIODevice::ReadOnly))
qDebug(QString("Network Reply > cannot open reply IO Device").toLatin1());
}
NetworkReply::NetworkReply(QObject *parent) : QObject(parent)
{
}
NetworkReply::NetworkReply(const NetworkReply &reply)
{
reply = reply.reply;
}
NetworkReply::~NetworkReply()
{
//reply->close();
//delete reply;
}
NetworkReply &NetworkReply::operator =(const NetworkReply &reply)
{
return NetworkReply(reply);
}
NetworkManager::NetworkManager(QObject *parent) : QObject(parent), manager(QNetworkAccessManager(parent))
{
}
NetworkManager::~NetworkManager()
{
}
QNetworkReply *NetworkManager::Qget(NetworkRequest request)
{
return m_manager.get(request.getRequest());
}
NetworkReply NetworkManager::get(NetworkRequest request)
{
return NetworkReply(m_manager.get(request.getRequest()), parent());
}
To copy to clipboard, switch view to plain text mode
in the main
QString scenario
= file
->readAll
();
QScriptEngine *engine = new QScriptEngine(parent);
NetworkRequestRegister::Register(engine);
QScriptSyntaxCheckResult checkResult = QScriptEngine::checkSyntax(screnario);
if(checkResult.state() == QScriptSyntaxCheckResult::Valid)
{
engine->evaluate(screnario);
}
QFile *file = new QFile("scenario.txt");
file->open(QIODevice::ReadOnly);
QString scenario = file->readAll();
QScriptEngine *engine = new QScriptEngine(parent);
NetworkRequestRegister::Register(engine);
QScriptSyntaxCheckResult checkResult = QScriptEngine::checkSyntax(screnario);
if(checkResult.state() == QScriptSyntaxCheckResult::Valid)
{
engine->evaluate(screnario);
}
To copy to clipboard, switch view to plain text mode
And in scenatio.txt
function fileGetTest() {
var Request = NetworkRequest("www.google.fr");
var Manager = NetworkManager();
var Respond = Manager.get(Request);
}
fileGetTest();
function fileGetTest() {
var Request = NetworkRequest("www.google.fr");
var Manager = NetworkManager();
var Respond = Manager.get(Request);
}
fileGetTest();
To copy to clipboard, switch view to plain text mode
There is a way to add a file in a post ?
Bookmarks