Russian Qt Forum
Ноябрь 22, 2024, 17:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: неприступный QObject в QtScript [4.3.4/4.4.0]...  (Прочитано 10095 раз)
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 в скрипте.

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

Сообщений: 587


Просмотр профиля
« Ответ #1 : Май 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?
Записан
Dodge
Гость
« Ответ #2 : Май 16, 2008, 17:34 »

А откуда известно, что в java сриптах можно создавать действующий QObject?
Во первых отвечать вопросом на вопрос - признак плохого тона.
Во вторых причем тут javascript? ... вопрос по QtScript общего у него с javascript тока стандарт: ECMA-262
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Май 16, 2008, 19:47 »

А откуда известно, что в java сриптах можно создавать действующий QObject?
Во первых отвечать вопросом на вопрос - признак плохого тона.
Во вторых причем тут javascript? ... вопрос по QtScript общего у него с javascript тока стандарт: ECMA-262

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

Я советую присмотреться к Qt Script Generator http://labs.trolltech.com/page/Projects/QtScript/Generator
Мне кажется это как раз подойдет.
Записан
Dodge
Гость
« Ответ #4 : Май 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 таковой прокси впринципе не требуется т.к. интерпритатор "знает" этот тип. Проблема в том что с объектами данного типа невозможно работать... возможно это баг, а может и нет... корочеговоря вопрос остается открытым.

Флудер  Показает язык
Записан
Dodge
Гость
« Ответ #5 : Май 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();

Все, всем спасибо за внимание =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 23.