crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QTScript
Гость_Noob_*
сообщение 16.7.2009, 12:21
Сообщение #1





Гости








    


Имеется следующий(для примера) код:
Раскрывающийся текст

#ifndef UPLOADER_H
#define UPLOADER_H

#include <QThread>
#include <QtNetwork>
#include <QtScript>

class Uploader : public QThread
{
    Q_OBJECT

public:
    Uploader(QObject* parent = 0);
    ~Uploader();

signals:
    void returnMessage(QString status, QString message);
    
public slots:
    void Stop();

protected:
    void run();
    QScriptValue connect(QScriptContext *context, QScriptEngine *engine);
    
private:
    QTcpSocket socket;
    QScriptEngine engine;
};

#endif

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "uploader.h"

QScriptValue Uploader::connect(QScriptContext *context, QScriptEngine *engine)
{
    QString host = context->argument(0).toString();
    qint32 port = context->argument(1).toInt32();
    qint32 timeout = context->argument(2).toInt32();

    emit returnMessage("info", "function connect(" + host + ", " + QString("%1").arg(port) + ", " + QString("%1").arg(timeout) + ");");

    socket.connectToHost(host, port);

    if (!socket.waitForConnected(timeout * 1000))
    {
        emit returnMessage("error", socket.errorString());
        return false;
    }

    return true;
}

Uploader::Uploader(QObject* parent)
{
    QFile scriptFile("upload.js");
    if (scriptFile.open(QIODevice::ReadOnly))
    {
        QString info = engine.evaluate(scriptFile.readAll(), "upload.js").toString();
    }
    else
    {
        emit returnMessage("error", "Внимание: ошибка открытия файла upload.js");
    }
    scriptFile.close();

    QScriptValue fun1 = engine.newFunction(connect);
    engine.globalObject().setProperty("connect", fun1);
}

Uploader::~Uploader()
{
}

void Uploader::Stop()
{
    return;
}

void Uploader::run()
{
    QScriptValue main = engine.evaluate("main");
    QString info =  main.call(QScriptValue()).toString();

    return;
}



При компиляции кода выводится сообщение "error: no matching function for call to `QScriptEngine::newFunction(<unknown type>)'" (строка "QScriptValue fun1 = engine.newFunction(connect);")
Вопрос: как заставить эту заразу работать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.7.2009, 12:57
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


можно предположить что конфликтует с QObject::connect(...)
попробуйте поменять имя этой функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Noob_*
сообщение 16.7.2009, 13:31
Сообщение #3





Гости








    


Цитата(kwisp @ 16.7.2009, 12:57) *
можно предположить что конфликтует с QObject::connect(...)
попробуйте поменять имя этой функции.


Ничего не изменилось
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.7.2009, 14:34
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


в примерах используются только статические и внешние функции..
наверное методы нельзя использовать таким образом.
Цитата
error: argument of type `QScriptValue (Uploader:: )(QScriptContext*, QScriptEngine*)' does not match `QScriptValue (*)(QScriptContext*, QScriptEngine*)'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.11.2017, 14:25