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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Динамические переменные в .pro (qmake)  (Прочитано 5522 раз)
andrew.k
Гость
« : Январь 28, 2015, 18:18 »

Никак не могу найти способ получить значение переменной имя которой было сформировано динамически.

Например.

Код
C++ (Qt)
VALUE= special_value
V1=VAL
message(Value is: $$join(V1,,,UE))
 

В результате вывод будет
Код
Bash
Test value: VALUE
 
А хочется получить значение переменной VALUE, а именно speial_value.

Возможно ли это и как?

При чем тестовые функции, всегда реагируют положительно, например:
Код
C++ (Qt)
contains($$join(V1,,,UE), nevermind)
{
  message(This block works always)
}
 
« Последнее редактирование: Январь 28, 2015, 20:55 от andrew.k » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Январь 28, 2015, 19:06 »

Перед именем переменной $$ нужно ставить.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Январь 28, 2015, 19:53 »

попробовать через eval()?
Записан
andrew.k
Гость
« Ответ #3 : Январь 28, 2015, 19:58 »

попробовать через eval()?
Например как?
Записан
andrew.k
Гость
« Ответ #4 : Январь 28, 2015, 20:01 »

Перед именем переменной $$ нужно ставить.
Как этот факт помогает проблеме?
Записан
andrew.k
Гость
« Ответ #5 : Январь 28, 2015, 20:06 »

Разобрался. В коде была ошибка. Фигурная скобка должна быть на одной строке с ключевым словом contains.

Работающее решение.
Код
C++ (Qt)
VALUE= special_value
V1=VAL
message(Value is: $$join(V1,,,UE))
contains($$join(V1,,,UE), special_value){
  message(Special value found)
}
 

Но это только половина решения. Это позволяет сравнить значение с заранее известным.

Alex Custov, по этой части eval аналогично срабатывает.
Так что второй вариант это действительно использовать eval.


UPD. Сначала неверно разобрался как работает eval. Сейчас дошло. Так что eval не подходит в этом варианте.

Как теперь просто получить доступ к значению?
« Последнее редактирование: Январь 28, 2015, 20:42 от andrew.k » Записан
andrew.k
Гость
« Ответ #6 : Январь 28, 2015, 20:19 »

В документации нигде не упоминается, но нашел методом тыка (с подачи Алекса) подобное решение.
Не знаю, на сколько оно верное. Но вроде работает.

В переменную p записывается имя переменной, значение которой мы хотим динамически получить:
Код
C++ (Qt)
VAR = Value
p = VAR
message(Pointer is $$p; VAR value is $$eval($$p))
 

Что дает требуемый вывод:
Код
Bash
Project MESSAGE: Pointer is VAR; VAR value is Value
 

В инете подобных примеров использования не нашел.
Нашел использование $$eval, но для Qt 5
« Последнее редактирование: Январь 28, 2015, 20:35 от andrew.k » Записан
andrew.k
Гость
« Ответ #7 : Январь 28, 2015, 20:54 »

Итог. Можно динамически сформировать имя переменной и получить ее значение (вывести, сравнить), т.е. работать с ним как обычно.

Примеры:
Код
C++ (Qt)
var = value
 
p = var # динамически сформированное имя переменной
 
eval(pv = $$eval($$p))
message(Новая переменная с искомым значением: $$pv)
 
# Без использования дополнительной переменной
message(Значение: $$eval($$p))
 
#Проверка значения переменной заданному
contains($$p, value) {
   message(Содержит value!)
}
 
# Вообще без использования "указателя"
message(Без указателя: $$eval(var))
 
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Январь 28, 2015, 22:48 »

Жаль нет кнопки "Спасибо", а то яб andrew.k отметил, за раскопки и готовый пример.
Записан

Юра.
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #9 : Январь 29, 2015, 00:56 »

Перед именем переменной $$ нужно ставить.
Как этот факт помогает проблеме?
Извиняюсь, не так понял вопрос.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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