Russian Qt Forum

Qt => Общие вопросы => Тема начата: klim от Ноябрь 16, 2008, 00:41



Название: Доступ к объектам с однотипными названиями
Отправлено: klim от Ноябрь 16, 2008, 00:41
Предположим, что есть n объектов с именами типа obj1, obj2, obj3 и т.д. Можно как-нибудь к ним получить доступ, используя цикл for или обязательно вручную в коде прописывать имя каждого?


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: Karl-Philipp от Ноябрь 16, 2008, 00:46
Можно, например, в некий контейнер поместить.


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: Detonator от Ноябрь 16, 2008, 09:16
Не уверен, но думаю так

#define obj(index) obj##index
for(int i...) obj(i) = 5;


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: BRE от Ноябрь 16, 2008, 09:37
Не уверен, но думаю так

#define obj(index) obj##index
for(int i...) obj(i) = 5;
Не получиться, этот код после препроцессора развернется в:
Код:
for( int i...) obji = 5;


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: klim от Ноябрь 16, 2008, 12:55
Можно, например, в некий контейнер поместить.
Можно пример какой-нибудь?

Вот во всяких JavaScript, ActionScript и т.п. есть функция eval(). По-моему так она называется.
Т.е. если мы там напишем что-то вроде eval("obj"+i).prop = value; - транслятор нас поймет.


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: pastor от Ноябрь 16, 2008, 13:33
Можно пример какой-нибудь?

Сохраняй указатели на каждый объект в списке:

Код:
QList<Type *> list;
list.append(..);  //0
list.append(..);  //1
list.append(..);  //2
list.append(..);  //3
...
list.append(..);  //n

....
int listSize = list.size();
for (int i = 0; i < listSize; ++i)
   list.value(i)->prop = i;


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: Detonator от Ноябрь 16, 2008, 17:13
Можно, например, в некий контейнер поместить.
Можно пример какой-нибудь?

Вот во всяких JavaScript, ActionScript и т.п. есть функция eval(). По-моему так она называется.
Т.е. если мы там напишем что-то вроде eval("obj"+i).prop = value; - транслятор нас поймет.

Ну в Qt тоже есть поддержка скриптов, засунь объекты в скрипт и вызови evaluate :)


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: lit-uriy от Ноябрь 16, 2008, 19:06
а можно использовать setObjectName, чтобы задать имена всем интерисующим объектам
и затем в цикле (например если это кнопки)
findChild<QPushButton *>("button"+QString::num(i));


Название: Re: Доступ к объектам с однотипными названиями
Отправлено: klim от Ноябрь 17, 2008, 22:36
а можно использовать setObjectName, чтобы задать имена всем интерисующим объектам
и затем в цикле (например если это кнопки)
findChild<QPushButton *>("button"+QString::num(i));
Т.е. надо сначала пробежать setObjectName() по всем интересующим объектам и только потом можно обращаться к ним с помощью findChild?


Ну в Qt тоже есть поддержка скриптов, засунь объекты в скрипт и вызови evaluate :)
брр... чего-то сложно как-то. Я всё-таки хочу что-нибудь на уровне ISO C++. Не очень даже понятно в какой момент работают они. При компиляции? Или во время работы программы?


Сохраняй указатели на каждый объект в списке:

Код:
QList<Type *> list;
list.append(..);  //0
list.append(..);  //1
list.append(..);  //2
list.append(..);  //3
...
list.append(..);  //n

....
int listSize = list.size();
for (int i = 0; i < listSize; ++i)
   list.value(i)->prop = i;
Спасибо за пример. Это, пожалуй, самое подходящее.