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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к объектам с однотипными названиями  (Прочитано 5351 раз)
klim
Гость
« : Ноябрь 16, 2008, 00:41 »

Предположим, что есть n объектов с именами типа obj1, obj2, obj3 и т.д. Можно как-нибудь к ним получить доступ, используя цикл for или обязательно вручную в коде прописывать имя каждого?
Записан
Karl-Philipp
Гость
« Ответ #1 : Ноябрь 16, 2008, 00:46 »

Можно, например, в некий контейнер поместить.
Записан
Detonator
Гость
« Ответ #2 : Ноябрь 16, 2008, 09:16 »

Не уверен, но думаю так

#define obj(index) obj##index
for(int i...) obj(i) = 5;
Записан
BRE
Гость
« Ответ #3 : Ноябрь 16, 2008, 09:37 »

Не уверен, но думаю так

#define obj(index) obj##index
for(int i...) obj(i) = 5;
Не получиться, этот код после препроцессора развернется в:
Код:
for( int i...) obji = 5;
Записан
klim
Гость
« Ответ #4 : Ноябрь 16, 2008, 12:55 »

Можно, например, в некий контейнер поместить.
Можно пример какой-нибудь?

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Ноябрь 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;
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Detonator
Гость
« Ответ #6 : Ноябрь 16, 2008, 17:13 »

Можно, например, в некий контейнер поместить.
Можно пример какой-нибудь?

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

Ну в Qt тоже есть поддержка скриптов, засунь объекты в скрипт и вызови evaluate Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Ноябрь 16, 2008, 19:06 »

а можно использовать setObjectName, чтобы задать имена всем интерисующим объектам
и затем в цикле (например если это кнопки)
findChild<QPushButton *>("button"+QString::num(i));
Записан

Юра.
klim
Гость
« Ответ #8 : Ноябрь 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;
Спасибо за пример. Это, пожалуй, самое подходящее.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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