开发者

Javascript object that inherits QWidget

开发者 https://www.devze.com 2023-02-09 09:48 出处:网络
I am doing something in Javascript and Qt, and for my purpose, I need a javascript object that inherits QWidget. So far, I have tried the following:

I am doing something in Javascript and Qt, and for my purpose, I need a javascript object that inherits QWidget. So far, I have tried the following:

function Test()
{
    QWidget.call(this);
    this.button = new QPushButton("test");
    this.layout().insertWidget(1,this.button);
    t开发者_运维技巧his.button.clicked.connect(this.slot);
}

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

Test.prototype = new QWidget();

I instantiate object from the class "Test" and with the call of the show() method, I get the widget:

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

However, I get the following interpreter error:

Error: In run/evaluate: TypeError: Function.prototype.connect: target is not a function

If I change the line this.button.clicked.connect(this.slot); to call a static method defined like this:

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

the program runs fine, but static method is a no-no. I don't want anyone to call slot() except the instantiated object.

What is wrong with this picture? Has anyone had experience with Javascript objects inheriting Qt objects? Thanks in advance


Ok I think I might figured this out. So the magic here is:

Test.prototype = new QWidget();

needs to be before the constructor, also the constructor has to take "parent" argument too. And last but not least, in connect() there are two arguments: first is which class contains the slot (in my case it is this) and the name of the slot with this pointer.

So, having this in mind, the above code will look like 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");
}

This is to whom it may concern.

0

精彩评论

暂无评论...
验证码 换一张
取 消