2

QtScript の可能性を研究しています。QObjectC ++で作成してからに渡すことができることを理解していますQScriptEngine

QObject *someObject = new WindowWithText;
QScriptValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("window", objectValue);

これは機能します-C++で定義されたメソッドを呼び出すことができました:

画像説明

WindowWithText宣言:

#include <QWidget>

namespace Ui {
class WindowWithText;
}

class WindowWithText : public QWidget
{
  Q_OBJECT

public:
  explicit WindowWithText(QWidget *parent = 0);
  ~WindowWithText();
public slots:
  void setHeading(const QString&);
  void setContents(const QString&);
  QString getHeading() const;

private:
  Ui::WindowWithText *ui;
};

しかし、次のように、qtscript 自体からウィンドウをインスタンス化したいと思います。

var window = new WindowWithText();

おそらくコンストラクタとQtCcriptの間にプロキシを作成する必要があることは理解していますが、どうすればよいですか?

これまでのところ、オブジェクトを作成するstaticメソッドを作成しましたが、それはありません:newInstancenew

QScriptValue WindowWithText::newInstance(QScriptContext *context, QScriptEngine *engine)
{
  QObject *someObject = new WindowWithText;
  QScriptValue objectValue = engine->newQObject(someObject);
  return objectValue;
}

次のようにエンジンにエクスポートしました。

engine.globalObject().setProperty("WindowWithText", engine.newFunction(WindowWithText::newInstance));

ただし、これは使用せずnew、真の JavaScript 疑似クラスではありません。

画像説明

次のコードは失敗します。

function Subclass() {
  this.setHeading("bla bla");
}
Subclass.prototype = Object.create(WindowWithText.prototype);

var window = new dd();
window.show();

WindowWithText.prototypeとは何の関係もないという事実によるエラーWindowWithText:

TypeError: Result of expression 'this.setHeading' [undefined] is not a function.

C++ クラスをエンジンにエクスポートする、より信頼性が高く、面倒でない方法はありますか?

4

0 に答える 0