0

私は Javascript と Qt で何かをしています。私の目的のために、QWidget を継承する JavaScript オブジェクトが必要です。これまでのところ、次のことを試しました。

function Test()
{
    QWidget.call(this);
    this.button = new QPushButton("test");
    this.layout().insertWidget(1,this.button);
    this.button.clicked.connect(this.slot);
}

Test.prototype.slot = function()
{
    print("Test button clicked");
}

Test.prototype = new QWidget();

クラス「Test」からオブジェクトをインスタンス化し、show()メソッドの呼び出しでウィジェットを取得します。

var testVariable = new Test();
testVariable.show();

ただし、次のインタープリター エラーが発生します。

エラー: 実行/評価中: TypeError: Function.prototype.connect: ターゲットは関数ではありません

this.button.clicked.connect(this.slot);次のように定義された静的メソッドを呼び出すように行を変更すると:

    this.button.clicked.connect(Test.slot);
...
...
    Test.slot = function () { /* code */ }

プログラムは正常に実行されますが、静的メソッドはダメです。slot()インスタンス化されたオブジェクト以外は誰も呼び出さないでください。

この写真の何が問題になっていますか? Qtオブジェクトを継承するJavascriptオブジェクトを経験した人はいますか? 前もって感謝します

4

1 に答える 1

2

わかりました私はこれを理解したかもしれないと思います。したがって、ここでの魔法は次のとおりです。

Test.prototype = new QWidget();

コンストラクターの前にある必要があり、コンストラクターも「親」引数を取る必要があります。最後になりましたconnect()が、2 つの引数があります。1 つ目は、どのクラスにスロットが含まれているか (私の場合は ですthis) と、thisポインターを含むスロットの名前です。

したがって、これを念頭に置いて、上記のコードは次のようになります。

Test.prototype = new QWidget();
function Test(parent)
{
    QWidget.call(this, parent);
    this.button = new QPushButton("test");
    this.layout().insertWidget(1, this.button);
    this.button.clicked.connect(this, this.slot);
}

Test.prototype.slot = function()
{
    print("Test button clicked");
}

これは、それが関係する可能性のある人です。

于 2011-02-15T14:54:44.597 に答える