crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> привязка переменных в QtScript
call_me_Frank
  опции профиля:
сообщение 28.7.2015, 17:18
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


Всем привет!

у меня есть некая карта или массив данных, например QHash<str,str>, в которой лежат пары имя_переменной - значение. Значения этих переменных меняются со временем. Как можно привязать значения этих переменных к переменным внутри скрипта - создать отображение этих данных в скрипте?

Допустим, в карте лежит пара ("var_A", 56). Мне нужно, чтобы внутри скрипта у меня была переменная 'var_A' и значение её соответствовало значению внутри пары в любой момент времени.

Сейчас у меня происходит запуск скрипта с некоторой периодичностью и перед каждым запуском приходится задавать переменную скрипта:

engine->globalObject().setProperty("var_A", data.value("var_A"));


и меня это не очень устраивает ) что посоветуете?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 28.7.2015, 17:54
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

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




Репутация:   0  


Не совсем понятно что тебе нужно. Тебе нужно видеть карту или переменную ?
Каждая переменная в скрипте это отдельный объект, и что туда положишь, то
там и будет, хош int хош QObject или ещё чего нибудь. Хэш это для доступа и
быстрого поиска из С++, а в скрипте поиском переменной по имени занимается Engine.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
call_me_Frank
  опции профиля:
сообщение 28.7.2015, 18:09
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


Ну вот смотри, можно сказать, что сейчас переменная привязана по значению - поэтому перед каждым запуском скрипта её приходится задавать заново. А мне нужно что-то вроде динамической привязки - я говорю скриптовому движку, что мне нужна переменная, которая привязана к некоторой переменной в классе и внутри скрипта будет называться var_A.

Пусть переменная в классе имеет значение 56, я запускаю скрипт - он выводит на экран значение 56, затем переменная в классе получает новое значение (12), я снова запускаю скрипт на исполнение - и он выводит значение 12.

В общем-то не суть, является ли переменная самостоятельной отдельной величиной или частью карты...как мне кажется ) возможно, нужны будут и отдельные и те, что в карте.

P.S. в скрипте мне не нужно видеть контейнер, но мне нужно видеть его элементы как самостоятельные переменные внутри скрипта.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 28.7.2015, 19:00
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

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




Репутация:   0  


Т.е. в карте у тебя лежит имя переменной и рядом лежит сама переменная и оба
эти объекта тебе нужны в скрипте вне зависимости от кол-ва запусков скрипта ?! Правильно ?
Если так, то при запуске скрипта, он так или иначе получает определённое окружение
от Engine, и если тебе нужны какие-либо "статические" переменные в скрипте, нужно
позаботиться об этом окружении, т.е. без передачи контейнера никак, imho
При выходе из скрипта, окружение "затирается" и при новом запуске, окружение уже другое ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 28.7.2015, 21:35
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

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




Репутация:   8  


Можно создать QObject и передать его в скрипт,
все Property этого объекта будут синхронно менятся в C++ и в скрипте.
http://doc.qt.io/qt-5/properties.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
call_me_Frank
  опции профиля:
сообщение 29.7.2015, 10:09
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


Цитата(lanz @ 28.7.2015, 21:35) *
Можно создать QObject и передать его в скрипт,
все Property этого объекта будут синхронно менятся в C++ и в скрипте.
http://doc.qt.io/qt-5/properties.html


Отличная идея! Похоже, это именно то, что мне и нужно :clapping:

P.S....но всё же не именно то, что мне хотелось бы )) к этим переменным придется обращаться через obj.property("var_A") вместо простого имени переменной. Можно же передать движку QObject лишь однажды, задать ему скриптовое имя и обращаться к нему при любом запуске скрипта. Для переменных попроще (типа int, string, double, ...) такой возможности нет?

Сообщение отредактировал call_me_Frank - 29.7.2015, 10:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 29.7.2015, 10:39
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

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




Репутация:   8  


Цитата
obj.property("var_A")

Могу уже подзабыть кое что, но насколько я помню obj.var_A работает так же.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
call_me_Frank
  опции профиля:
сообщение 29.7.2015, 11:02
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

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




Репутация:   0  


Цитата(lanz @ 29.7.2015, 10:39) *
Цитата
obj.property("var_A")

Могу уже подзабыть кое что, но насколько я помню obj.var_A работает так же.


работает, спасибо )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 16:32