我在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对象的经验? 提前致谢
答案 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");
}
这可能与他有关。