Russian Qt Forum

Qt => Общие вопросы => Тема начата: andrew.k от Январь 28, 2015, 18:18



Название: [Решено] Динамические переменные в .pro (qmake)
Отправлено: 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)
}
 


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: kibsoft от Январь 28, 2015, 19:06
Перед именем переменной $$ нужно ставить.


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: Alex Custov от Январь 28, 2015, 19:53
попробовать через eval()?


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: andrew.k от Январь 28, 2015, 19:58
попробовать через eval()?
Например как?


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: andrew.k от Январь 28, 2015, 20:01
Перед именем переменной $$ нужно ставить.
Как этот факт помогает проблеме?


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: andrew.k от Январь 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 не подходит в этом варианте.

Как теперь просто получить доступ к значению?


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: andrew.k от Январь 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
 

В инете подобных примеров использования не нашел.
Нашел (http://doc.qt.io/qt-5/qmake-language.html) использование $$eval, но для Qt 5


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: andrew.k от Январь 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))
 


Название: Re: [Решено] Динамические переменные в .pro (qmake)
Отправлено: lit-uriy от Январь 28, 2015, 22:48
Жаль нет кнопки "Спасибо", а то яб andrew.k отметил, за раскопки и готовый пример.


Название: Re: Динамические переменные в .pro (qmake)
Отправлено: kibsoft от Январь 29, 2015, 00:56
Перед именем переменной $$ нужно ставить.
Как этот факт помогает проблеме?
Извиняюсь, не так понял вопрос.