Javascript объект, который наследует QWidget - PullRequest
0 голосов
/ 08 февраля 2011

Я делаю что-то в Javascript и Qt, и для моих целей мне нужен объект javascript, который наследует QWidget .До сих пор я пробовал следующее:

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

Однако я получаю следующую ошибку интерпретатора:

Ошибка: при запуске / оценке: ошибка типа: Function.prototype.connect: цель не является функцией

ЕслиЯ изменяю строку this.button.clicked.connect(this.slot); для вызова статического метода, определенного следующим образом:

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

программа работает нормально, но статический метод - нет-нет.Я не хочу, чтобы кто-либо вызывал slot(), кроме объекта-объекта.

Что не так с этой картинкой?Кто-нибудь имел опыт работы с объектами Javascript, наследующими объекты Qt?Заранее спасибо

1 Ответ

2 голосов
/ 15 февраля 2011

Хорошо, я думаю, что мог бы это понять.Итак, магия здесь такова:

Test.prototype = new QWidget();

должно быть перед конструктором, также конструктор должен принимать "родительский" аргумент .И последнее, но не менее важное: в 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");
}

Это то, к кому это может относиться.

...