Использование функции-члена с QScriptEngine :: newFunction - PullRequest
2 голосов
/ 29 мая 2010

Давайте рассмотрим случай простого класса:

QScriptEngine engine;

class MyClass {
public:
    QScriptValue foo(QScriptContext*, QScriptEngine*);
    MyClass();
};

QScriptValue MyClass:foo(QScriptContext* context, QScriptEngine* eng) {
    //something
}

MyClass::MyClass() {
    QScriptValue self = engine.newFunction(this->foo, 0);
    ....
}

Приведенная выше функция выдаёт мне ошибку: no matching function for call to ‘QScriptEngine::newFunction(<unresolved overloaded function type>, int)’

Я пытался использовать engine.newFunction(reinterpret_cast<FunctionSignature>(foo), 0);, но это дает мне ошибку, которая в основном говорит о том, что компилятор не знает ключевое слово с именем 'FunctionSignature'.

Любая помощь приветствуется. Большое спасибо.

С уважением, Рохан

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Глядя на официальный пример кода , вы должны сделать что-то вроде этого:

MyClass::MyClass() {
    QScriptValue self = engine.newFunction(foo, 0);
    ....
}

РЕДАКТИРОВАТЬ: ОК, я посмотрел ссылку немного больше. Проблема в том, что вы пытаетесь передать метод, где нужна функция. Как отметил @ mosg , это невозможно. Либо вы делаете foo статической функцией - либо вы пытаетесь найти решение в указанном потоке. Это означает, что вы создаете новый QObject через engine.newQObject.

0 голосов
/ 16 декабря 2014

Статический метод решения:

class MyClass {
public:
    static QScriptValue foo(QScriptContext*, QScriptEngine*);
    MyClass();
};

...

QScriptValue func = engine.newFunction(MyClass::foo)  
...