QtScript の可能性を研究しています。QObject
C ++で作成してからに渡すことができることを理解しています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
メソッドを作成しましたが、それはありません:newInstance
new
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++ クラスをエンジンにエクスポートする、より信頼性が高く、面倒でない方法はありますか?