Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Dodge от Май 13, 2008, 11:53



Название: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Dodge от Май 13, 2008, 11:53
пробовал наследование в QtScript:
Код:
function TestType () {
}

function TestType2 () {
}
TestType2.prototype = new TestType();

var test = new TestType2();

print(test instanceof TestType); // true
все замечательно, объект юзабелен. Пробую наследоватся от QObject:
Код:
function TestType () {
}
TestType.prototype = new QObject();

var test = new TestType();

print(test instanceof QObject); // true !
вроде тоже все правильно, но при первомже обращении к test:
Код:
print( test.objectName );
происходит краш: can't access member test.objectName of deleted QObject.
что не так? как мне получить юзабильный объект-наследник QObject в скрипте.

И еще вопрос: нигде в доках не нашел можноли создавать сигналы для своих типов (их методы можно использовать как слоты, почему нельзя создавать сигналы?), если можно то как?


Название: Re: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Mikhail от Май 16, 2008, 07:28
пробовал наследование в QtScript:
Код:
function TestType () {
}

function TestType2 () {
}
TestType2.prototype = new TestType();

var test = new TestType2();

print(test instanceof TestType); // true
все замечательно, объект юзабелен. Пробую наследоватся от QObject:
Код:
function TestType () {
}
TestType.prototype = new QObject();

var test = new TestType();

print(test instanceof QObject); // true !
вроде тоже все правильно, но при первомже обращении к test:
Код:
print( test.objectName );
происходит краш: can't access member test.objectName of deleted QObject.
что не так? как мне получить юзабильный объект-наследник QObject в скрипте.

И еще вопрос: нигде в доках не нашел можноли создавать сигналы для своих типов (их методы можно использовать как слоты, почему нельзя создавать сигналы?), если можно то как?

А откуда известно, что в java сриптах можно создавать действующий QObject?


Название: Re: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Dodge от Май 16, 2008, 17:34
А откуда известно, что в java сриптах можно создавать действующий QObject?
Во первых отвечать вопросом на вопрос - признак плохого тона.
Во вторых причем тут javascript? ... вопрос по QtScript общего у него с javascript тока стандарт: ECMA-262 (http://www.ecma-international.org/cgi-bin/counters/unicounter.pl?name=Ecma-262&deliver=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)


Название: Re: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Mikhail от Май 16, 2008, 19:47
А откуда известно, что в java сриптах можно создавать действующий QObject?
Во первых отвечать вопросом на вопрос - признак плохого тона.
Во вторых причем тут javascript? ... вопрос по QtScript общего у него с javascript тока стандарт: ECMA-262 (http://www.ecma-international.org/cgi-bin/counters/unicounter.pl?name=Ecma-262&deliver=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)

Да, конечно общий стандарт.
Но стандарт Ecma-262 ничего не знает об объекте QObject. Да и откуда?

Я советую присмотреться к Qt Script Generator http://labs.trolltech.com/page/Projects/QtScript/Generator
Мне кажется это как раз подойдет.


Название: Re: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Dodge от Май 16, 2008, 22:19
Цитировать
Да, конечно общий стандарт.
Но стандарт Ecma-262 ничего не знает об объекте QObject. Да и откуда?
хех, вы похоже не понимаете о чем идет речь, никто не говорит что QObject имеет какоето отношение к Ecma-262, я вам попытался объяснить, что javascript к данному вопросу не имеет никакого отношения.

Цитировать
Я советую присмотреться к Qt Script Generator http://labs.trolltech.com/page/Projects/QtScript/Generator
Мне кажется это как раз подойдет.
Это высказывание еще раз подтверждает вашу некомпитентность в данном вопросе... вкраце проект - Qt Script Generator, создает прокси для работы с типами библиотеки qt, которые "не знает" интерпритатор. Для QObject таковой прокси впринципе не требуется т.к. интерпритатор "знает" этот тип. Проблема в том что с объектами данного типа невозможно работать... возможно это баг, а может и нет... корочеговоря вопрос остается открытым.

Флудер  :P


Название: Re: неприступный QObject в QtScript [4.3.4/4.4.0]...
Отправлено: Dodge от Май 29, 2008, 13:49
Справился сам, сигналы пришлось реализовать руками )

декларируем новый класс на c++:
Код:
#ifndef __signalhandler_h__
#define __signalhandler_h__

#include <QObject>

class SignalHandler : public QObject {
  Q_OBJECT
signals:
  void signal( QVariant v0=QVariant(), QVariant v1=QVariant(), ... , QVariant v9=QVariant() );

};

#endif/*__signalhandler_h__*/

регестрируем класс SignalHandler через Q_SCRIPT_DECLARE_QMETAOBJECT

Теперь декларируем некий прототип в скрипте( далее все в скрипте ):
Код:
function MyPrototype () {
  // ...
  this.myPrototypeSignal = ( new SignalHandler() )["signal(QVariant)"];
/*
кол-во аргументов может быть от 0 до - 10, т.к. мы задали значения по умолчанию для всех аргументов
*/
  // ...
}
MyPrototype.prototype.do = function () {
  // ...
  this.myPrototypeSignal( "ПРЕВЕД МЕДВЕД!" );
}

Ну и для примера:
Код:
function mySignalProcessor( text ) {
}
var myObj = new MyPrototype();
myObj.myPrototypeSignal.connect( mySignalProcessor );
myObj.do();

Все, всем спасибо за внимание =)