Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: ax от Октябрь 02, 2008, 16:55



Название: Вопросы с 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 и т.д. но с возможностью и обработки в скрипте.

Разумного и красивого способа пока не получилось :(

Прошу прощения за возможную сумбурность изложения....