Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Script. Интеграция WebKit _ [РЕШЕНО] QtScript потеряные сигналы

Автор: LEO 23.11.2009, 17:20

Как всегда ошибка в какой-то глупости, но я ее найти не могу.
Проблема в том что после перевода объекта 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;
}
Помогите плиз с решением этой проблемы.

Автор: Litkevich Yuriy 23.11.2009, 18:38

Цитата(LEO @ 23.11.2009, 20:20) *
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)));
}
у тебя нет такого сигнала:
Port::signal_set(value)
Тыже определил сигнал:
Port::signal_set(QScriptValue);

Автор: LEO 23.11.2009, 18:49

пасиб.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)