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
Перед именем переменной $$ нужно ставить.
Как этот факт помогает проблеме?
Извиняюсь, не так понял вопрос.