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

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

Форум на CrossPlatform.RU _ Qt Script. Интеграция WebKit _ QTScript

Автор: Noob 16.7.2009, 12:21

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

Раскрывающийся текст

#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

можно предположить что конфликтует с QObject::connect(...)
попробуйте поменять имя этой функции.

Автор: Noob 16.7.2009, 13:31

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


Ничего не изменилось

Автор: kwisp 16.7.2009, 14:34

в примерах используются только статические и внешние функции..
наверное методы нельзя использовать таким образом.

Цитата
error: argument of type `QScriptValue (Uploader:: )(QScriptContext*, QScriptEngine*)' does not match `QScriptValue (*)(QScriptContext*, QScriptEngine*)'

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