Как всегда ошибка в какой-то глупости, но я ее найти не могу.
Проблема в том что после перевода объекта QScriptValue к типу Port его сигналы куда-то пропадают:
Object::connect: No such signal Port::signal_set(value) in port.cpp:12
Object::connect: No such signal Port::signal_set(value) in port.cpp:13
port.h
#ifndef PORT_H
#define PORT_H
#include <QtCore>
#include <QtScript>
class Port : public QObject, public QScriptable
{
Q_OBJECT
public:
Port(QObject *_parent = 0);
~Port(){};
public slots:
void connect(const QScriptValue &_object);
//void disconnect(const QScriptValue &_object);
void set(QScriptValue _value);
private slots:
void get(const QScriptValue &_value);
signals:
void onGet();
void onSet();
void signal_set(QScriptValue _value);
void signal_get(QScriptValue _value);
private:
int m_flag;
QScriptValue m_data;
};
#endif // PORT_H
port.cpp
#include "./port.h"
Q_DECLARE_METATYPE(Port*)
Port::Port(QObject *_parent) : QObject(_parent){}
void Port::connect(const QScriptValue &_object)
{
Port *port = qscriptvalue_cast<Port*>(_object);
if (!port)
return;
QObject::connect(this, SIGNAL(signal_set(value)), port, SLOT(get(value)));
QObject::connect(port, SIGNAL(signal_set(value)), this, SLOT(get(value)));
}
/*void Port::disconnect(const QScriptValue &_object)
{
Port *port = qscriptvalue_cast<Port*>(_object);
if (!port)
return;
QObject::disconnect(this, SIGNAL(signal_set(value)), port, SLOT(get(value)));
QObject::disconnect(port, SIGNAL(signal_set(value)), this, SLOT(get(value)));
}*/
void Port::set(QScriptValue _value)
{
emit onSet();
emit signal_set(_value);
}
void Port::get(const QScriptValue &_value)
{
emit onGet();
emit signal_get(_value);
}
main.cpp
#include "port.h"
int main(int argc, char *argv[])
{
QScriptEngine eng;
Port a, b;
eng.globalObject().setProperty("a", eng.newQObject(&a));
eng.globalObject().setProperty("b", eng.newQObject(&b));
QString q;
q = "a.connect(b); b.onGet.connect(function(d){print(d);}); a.set('test');";
eng.evaluate(q);
return 0;
}
Помогите плиз с решением этой проблемы.