Я пытаюсь реализовать возможность написания сценария существующего приложения 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 ())
(Я действительно упростил весь код, и, возможно, проблема в другом месте, но это явно странно)
Любая идея ?
Благодарю.
Ответ был глупым.
У меня были свойства, определенные так:
Q_PROPERTY(int m_firstResult READ firstfunction)
Функция, находящаяся в Q_PROPERTY, возвращает ошибку TypeError.
И я даже не поместил свои свойства в мой вопрос, поэтому никто не смог ответить на мой вопрос, извините за это.
Других решений пока нет …