crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QVariantMap в скрипт
Гость_Гость_rukudias_*_*
сообщение 13.5.2009, 15:30
Сообщение #1





Гости








    


Привет Всем!
Нужно заполнить обьект QVariantMap и передать его в скрипт.
как это осуществить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 13.5.2009, 16:43
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как я понял из описания, примерно так:
     QScriptEngine engine;
     QVariantMap *pVarMap = new QVariantMap;
     // заполняешь pVarMap
     QScriptValue objectValue = engine.newQObject( pVarMap);
     engine.globalObject().setProperty( "myObject", objectValue);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rukudias
  опции профиля:
сообщение 13.5.2009, 16:55
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 26.3.2009
Пользователь №: 641

Спасибо сказали: 0 раз(а)




Репутация:   0  


Дело в том что QVariantMap не дитё QObject! Втом то и прикол можно через обвертку.
а хотелось бы на прямую...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 13.5.2009, 17:04
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(rukudias @ 13.5.2009, 17:55) *
Дело в том что QVariantMap не дитё QObject!
Угу, не подумал об этом.

А чем обертка не устраивает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rukudias
  опции профиля:
сообщение 13.5.2009, 17:26
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 26.3.2009
Пользователь №: 641

Спасибо сказали: 0 раз(а)




Репутация:   0  


не ну должнош както без обвертки!

можно так то так нельзя инициализировать то что передаеш
но можно заполнять и возвращать
QScriptEngine scriptEngine;
QScriptValue script_map = scriptEngine.newObject();
scriptEngine.globalObject().setProperty("variant", script_map);

а хотелось вот так
QVariantMap store;

store["state"]=1;

//здесь чудоспособ передачи а в скрипте

if(variant["state"]==1)
{

}
else
{

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 13.5.2009, 17:29
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Глянь в исходники QtScript и думаю все поймешь.
Благо дело они не большие. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rukudias
  опции профиля:
сообщение 13.5.2009, 18:15
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 26.3.2009
Пользователь №: 641

Спасибо сказали: 0 раз(а)




Репутация:   0  


В исходнике не смотрел
сделал ТАК!
store["1"]=90;
QScriptValue script_map =scriptEngine.toScriptValue(store);
scriptEngine.globalObject().setProperty("variant", script_map);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.5.2009, 18:34
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Я это уже где-то расписывал, по моему в теме про вычисление формул.
Несколько месяцев ничего не писал, поэтому могут быть опечатки и всякие глюки. :)

Примерно так, я думаю. :)

// engin - указатель на объект скрипт-движка

QVariantMap map;

// Создали переменную массив
QScriptValue arr = engine->newArray( map.size() );

// По всем элементам массива
QMapIterator<QString, QVariant> i( map );
while( i.hasNext() )
{
    i.next();
    arr.setProperty( i.key(), engine->newVariant( i.value() ) );
}

// Регистрируем массив в контексте скрипт движка
engine->globalObject().setProperty( "mapArray", arr );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.12.2024, 21:08