0

我正在尝试实现为现有 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() 的良好返回值而被评估)

(我确实简化了所有代码,也许问题来自其他地方,但这显然很奇怪)

任何想法 ?谢谢。

4

1 回答 1

0

答案很愚蠢。我有这样定义的属性:

Q_PROPERTY(int m_firstResult READ firstfunction)

Q_PROPERTY 中的函数返回 TypeError。而且我什至没有将我的属性放在我的问题中,所以没有人能够回答我的问题,对此感到抱歉。

于 2013-11-29T10:41:15.623 回答