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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: metaobject()  (Прочитано 19961 раз)
BuRn
Гость
« : Март 03, 2012, 22:39 »

Есть ли возможность как в map , получить указатель на объект класса по его имени, без тупо for(int i=0;i<count_obj;i++) ... т.е. что бы не получать имя всех объектов и сравивать со стройкой, хотелось бы получить что - то типа map
Записан
BRE
Гость
« Ответ #1 : Март 03, 2012, 22:42 »

QList<T> QObject::findChildren ( const QString & name = QString() ) const
Записан
BuRn
Гость
« Ответ #2 : Март 03, 2012, 22:49 »

QList<T> QObject::findChildren ( const QString & name = QString() ) const

спасибо , видимо то что нужно...
Записан
BuRn
Гость
« Ответ #3 : Март 03, 2012, 22:51 »

ммм , а разве в качестве стринга передается не имя объекта ? нужно передаавать имя класса , а не имя объекта, точнее получать по имени класса объект из массива или списка объектов
Записан
BRE
Гость
« Ответ #4 : Март 03, 2012, 22:54 »

ммм , а разве в качестве стринга передается не имя объекта ? нужно передаавать имя класса , а не имя объекта, точнее получать по имени класса объект из массива или списка объектов
У тебя есть массив объектов, из него ты хочешь выделить объекты заданного класс?
Записан
BuRn
Гость
« Ответ #5 : Март 03, 2012, 22:58 »

именно ...
obj->metaObject()->className(); так мы получаем имя класса, а нужно обратная операция , по имени класса получить объект
примерно в текущем контексте что - то типа for(int i=0;i<count;i++){obj->metaObject()->className() == "MyClass") return obj;} вот что - то типа такого , просто объектов несколько и тупо циклом не хочется, хотелось бы как сделано в map
obj = map["MyClass"];
Записан
mutineer
Гость
« Ответ #6 : Март 03, 2012, 23:02 »

Так а почему самому указатели на объекты в мапу не засунуть?
Записан
BuRn
Гость
« Ответ #7 : Март 03, 2012, 23:07 »

ну ищу более лучший вариант. Суть такая, что бы по строку с именем класса преобразовать в класс, начальная суть вообще по имени класса создать объект с таким типом, если делать мап , то в нем нужно уже хранить все объекты
Записан
mutineer
Гость
« Ответ #8 : Март 03, 2012, 23:10 »

Ну в список гипотетический (который в твоем примере) ты тоже их должен как-то засунуть
Записан
BuRn
Гость
« Ответ #9 : Март 03, 2012, 23:13 »

Ну в список гипотетический (который в твоем примере) ты тоже их должен как-то засунуть
а вот в те списки уже придется вручную, просто другого варианта я не вижу , как получить объект того типа , который мы передадим как строку, кроме как создать заранее все объекты и вытаскивать их через какой нибудь map по имени. Нужно впринципе по факту просто преобразовать строку , с именем класса, в объект этого класса
Вот у metaobject есть className но так мы получаем имя класса, а нужна обратная операция
Записан
BRE
Гость
« Ответ #10 : Март 03, 2012, 23:14 »

Что-то я запутался, но для этого:
начальная суть вообще по имени класса создать объект с таким типом

можно посмотреть на:
int QMetaType::type ( const char * typeName ) [static]
void * QMetaType::construct ( int type, const void * copy = 0 ) [static]
Записан
BuRn
Гость
« Ответ #11 : Март 03, 2012, 23:18 »

Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа
Записан
mutineer
Гость
« Ответ #12 : Март 03, 2012, 23:19 »

Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа

Блин, окончательно запутал... Так массив объектов есть, или их надо создавать по имени?
Если массив есть, то юзай мапу вместо массива
Если массива нет, а объекты надо создавать, то юзай совет BRE
Записан
BRE
Гость
« Ответ #13 : Март 03, 2012, 23:20 »

Брр. Ты как это себе представляешь? Объектов одного класса может быть много, сам класс не сохраняет указатели на свои объекты.
Для своих классов такой функционал можешь добавить сам.
Записан
BuRn
Гость
« Ответ #14 : Март 03, 2012, 23:22 »

Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа

Блин, окончательно запутал... Так массив объектов есть, или их надо создавать по имени?
Если массив есть, то юзай мапу вместо массива
Если массива нет, а объекты надо создавать, то юзай совет BRE
вообще подразумевается 2 варианта , что лучше пока не решили , хранить все объекты и через map по имени вытаскивать их, либо создавать не лету , конечно 2 вариант лучше
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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