继承QWidget的Javascript对象

时间:2011-02-08 10:39:36

标签: javascript qt inheritance qtscript

我在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();

但是,我得到以下解释器错误:

  

错误:在run / evaluate中:TypeError:   Function.prototype.connect:target is   不是一个功能

如果我更改行this.button.clicked.connect(this.slot);以调用如下定义的静态方法:

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

程序运行正常,但静态方法是禁止的。除了实例化的对象之外,我不希望任何人调用slot()

这张照片出了什么问题?有没有人有继承Qt对象的Javascript对象的经验? 提前致谢

1 个答案:

答案 0 :(得分:2)

好的,我想我可能会想到这一点。所以这里的魔力是:

Test.prototype = new QWidget();

需要之前构造函数,构造函数也必须采用"parent" argument。最后但并非最不重要的是,在connect()中有两个参数:第一个是哪个类包含槽(在我的例子中是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");
}

这可能与他有关。