Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [РЕШЕНО] QtScript потеряные сигналы
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Script. Интеграция WebKit
LEO
Как всегда ошибка в какой-то глупости, но я ее найти не могу.
Проблема в том что после перевода объекта 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
Цитата(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
пасиб.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.