crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаНачать новую тему
> [РЕШЕНО] QtScript потеряные сигналы
LEO
  опции профиля:
сообщение 23.11.2009, 17:20
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 8.3.2009
Пользователь №: 595

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как всегда ошибка в какой-то глупости, но я ее найти не могу.
Проблема в том что после перевода объекта 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
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(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
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 8.3.2009
Пользователь №: 595

Спасибо сказали: 0 раз(а)




Репутация:   0  


пасиб.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 8.12.2021, 21:58