JavaScript — TypeError с использованием QTScript в приложении C ++

Я пытаюсь реализовать возможность написания сценария существующего приложения QT.

Это работает нормально, но некоторые функции моего класса возвращают TypeError.

Myclass.h (действительно упрощенный):

class Myclass: public QObject
{
Q_OBJECT
public slots:
int firstfunction() const;
int secondfunction() const;

private:
int m_firstResult;
int m_secondResult;
}

Myclass.cpp:

int Myclass::firstfunction() const
{
return m_firstResult;
}

int Myclass::secondfunction() const
{
return m_secondResult;
}

Главный :

Myclass qtObjectClass();
QScriptEngine scriptEngine;

QScriptValue qValue= scriptEngine.newQObject(&qtObjectClass);
Q_ASSERT (qtObjectClass.isQObject());

scriptEngine.globalObject().setProperty("QTscriptEngine", qValue);

QFile file("testScript.js");
file.open(QIODevice::ReadOnly);
QScriptValue result = scriptEngine.evaluate(file.readAll());

if(result.toString() != "undefined")
std::cout << result.toString().toStdString() << std::endl;

file.close();

if (scriptEngine.hasUncaughtException())
{
int lineNo = scriptEngine.uncaughtExceptionLineNumber();
printf("lineNo : %i", lineNo);
}

Сценарий :

print(QTscriptEngine.firstfunction());

print(QTscriptEngine.secondfunction());

И (странный) результат:

5
TypeError: Result of expression 'QTscriptEngine.secondfunction' [1] is not a function.

Где 5 — результат firstfunction (), а [1] — результат secondfunction ().

Конечно, результат моей функции не является функцией, это довольно нормально, нет?

Я не понимаю, почему один работает, а другой — нет (но оценивается, потому что [1] явно хорошее возвращаемое значение secondfunction ())

(Я действительно упростил весь код, и, возможно, проблема в другом месте, но это явно странно)

Любая идея ?
Благодарю.

0

Решение

Ответ был глупым.
У меня были свойства, определенные так:

Q_PROPERTY(int m_firstResult READ firstfunction)

Функция, находящаяся в Q_PROPERTY, возвращает ошибку TypeError.
И я даже не поместил свои свойства в мой вопрос, поэтому никто не смог ответить на мой вопрос, извините за это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]