Название: Вопросы с QtScript при переходе с 4.3.* на 4.4.* Отправлено: ax от Октябрь 02, 2008, 16:55 Словил пару вопросов при переходе на 4.4
1. Есть объект -------------------------------------- #ifndef TEST_H #define TEST_H #include "abstracttest.h" #include <QObject> class Test : public AbstractTest { Q_OBJECT public: Test(QObject *parent); ~Test(); public Q_SLOTS: int test(const int com); private: }; #endif // TEST_H -------------------------------------- соот- но наследник #ifndef ABSTRACTTEST_H #define ABSTRACTTEST_H #include <QObject> class AbstractTest : public QObject { Q_OBJECT public: AbstractTest(QObject *parent); ~AbstractTest(); public Q_SLOTS: int test(const int com); }; #endif // ABSTRACTTEST_H ------------------------------------------ если я его делаю доступным из скрипта ...... Test * test = new Test(this); QScriptValue objectValue = engine.newQObject((Test *)(test)); engine.globalObject().setProperty("myObject", objectValue); и выполняю скрипт "myObject.test(5);" то в версии 4.3.* нормально вызывается слот test объекта Test а в 4.4.* ошибка "TypeError: ambiguous call of overloaded function test(); candidates were test(int) test(int)" но скрипт myObject.['test(int)'](5); проходит. Причем наследуемая функция может и виртуальной быть. У меня в проекте куча объектов с наследованием - все ругаются при вызове наследованных функций. Но это ладно. можно во всем скрипте поменять на Объект.[прототип]. 2. В 4.3.* можно было без изменений передать через скрипт любой QVariant. Пусть есть объект Test . у его С++ прототипа есть СЛОТЫ QVariant getVariant(); void setVariant(const QVariant & v); В 4.3 я мог в скрипте получить var data = Test.getVariant(); .... Test.setVariant(data) а в варианте у меня QMap c вложенными QMap и QList, эдакая древовидная структура. и она не изменялась в процессе прибывания в скрипте(Ж:)) если мне надо было ее распарсить в скрипте есть функцайка ...QVariantMap toMap(const QVariant & v) которая с-но возвращала уже скриптовый Объект и я с ним уже игрался.. :) в 4.4 QVariant сразу преобразуется согласно правил c++ в QtScript и наоборот. Наверно это и правильно по идее. Но тогда вопрос - Как иметь возможность передавать неизмененые QMap QList и т.д. но с возможностью и обработки в скрипте. Разумного и красивого способа пока не получилось :( Прошу прощения за возможную сумбурность изложения.... |