我正在尝试实现为现有 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() 的良好返回值而被评估)
(我确实简化了所有代码,也许问题来自其他地方,但这显然很奇怪)
任何想法 ?谢谢。