Javascript object that inherits QWidget

1.1k views Asked by At

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);
    this.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

1

There are 1 answers

0
Lawliet On

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.