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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопросы с QtScript при переходе с 4.3.* на 4.4.*  (Прочитано 3544 раз)
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« : Октябрь 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 и т.д. но с возможностью и обработки в скрипте.

Разумного и красивого способа пока не получилось Грустный

Прошу прощения за возможную сумбурность изложения....
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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