Russian Qt Forum
Ноябрь 26, 2024, 01:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
metaobject()
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: metaobject() (Прочитано 20142 раз)
BuRn
Гость
metaobject()
«
:
Март 03, 2012, 22:39 »
Есть ли возможность как в map , получить указатель на объект класса по его имени, без тупо for(int i=0;i<count_obj;i++) ... т.е. что бы не получать имя всех объектов и сравивать со стройкой, хотелось бы получить что - то типа map
Записан
BRE
Гость
Re: metaobject()
«
Ответ #1 :
Март 03, 2012, 22:42 »
QList<T> QObject::findChildren ( const QString & name = QString() ) const
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #2 :
Март 03, 2012, 22:49 »
Цитата: BRE от Март 03, 2012, 22:42
QList<T> QObject::findChildren ( const QString & name = QString() ) const
спасибо , видимо то что нужно...
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #3 :
Март 03, 2012, 22:51 »
ммм , а разве в качестве стринга передается не имя объекта ? нужно передаавать имя класса , а не имя объекта, точнее получать по имени класса объект из массива или списка объектов
Записан
BRE
Гость
Re: metaobject()
«
Ответ #4 :
Март 03, 2012, 22:54 »
Цитата: BuRn от Март 03, 2012, 22:51
ммм , а разве в качестве стринга передается не имя объекта ? нужно передаавать имя класса , а не имя объекта, точнее получать по имени класса объект из массива или списка объектов
У тебя есть массив объектов, из него ты хочешь выделить объекты заданного класс?
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #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
Гость
Re: metaobject()
«
Ответ #6 :
Март 03, 2012, 23:02 »
Так а почему самому указатели на объекты в мапу не засунуть?
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #7 :
Март 03, 2012, 23:07 »
ну ищу более лучший вариант. Суть такая, что бы по строку с именем класса преобразовать в класс, начальная суть вообще по имени класса создать объект с таким типом, если делать мап , то в нем нужно уже хранить все объекты
Записан
mutineer
Гость
Re: metaobject()
«
Ответ #8 :
Март 03, 2012, 23:10 »
Ну в список гипотетический (который в твоем примере) ты тоже их должен как-то засунуть
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #9 :
Март 03, 2012, 23:13 »
Цитата: mutineer от Март 03, 2012, 23:10
Ну в список гипотетический (который в твоем примере) ты тоже их должен как-то засунуть
а вот в те списки уже придется вручную, просто другого варианта я не вижу , как получить объект того типа , который мы передадим как строку, кроме как создать заранее все объекты и вытаскивать их через какой нибудь map по имени. Нужно впринципе по факту просто преобразовать строку , с именем класса, в объект этого класса
Вот у metaobject есть className но так мы получаем имя класса, а нужна обратная операция
Записан
BRE
Гость
Re: metaobject()
«
Ответ #10 :
Март 03, 2012, 23:14 »
Что-то я запутался, но для этого:
Цитата: BuRn от Март 03, 2012, 23:07
начальная суть вообще по имени класса создать объект с таким типом
можно посмотреть на:
int QMetaType::type ( const char * typeName ) [static]
void * QMetaType::construct ( int type, const void * copy = 0 ) [static]
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #11 :
Март 03, 2012, 23:18 »
Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа
Записан
mutineer
Гость
Re: metaobject()
«
Ответ #12 :
Март 03, 2012, 23:19 »
Цитата: BuRn от Март 03, 2012, 23:18
Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа
Блин, окончательно запутал... Так массив объектов есть, или их надо создавать по имени?
Если массив есть, то юзай мапу вместо массива
Если массива нет, а объекты надо создавать, то юзай совет BRE
Записан
BRE
Гость
Re: metaobject()
«
Ответ #13 :
Март 03, 2012, 23:20 »
Брр. Ты как это себе представляешь? Объектов одного класса может быть много, сам класс не сохраняет указатели на свои объекты.
Для своих классов такой функционал можешь добавить сам.
Записан
BuRn
Гость
Re: metaobject()
«
Ответ #14 :
Март 03, 2012, 23:22 »
Цитата: mutineer от Март 03, 2012, 23:19
Цитата: BuRn от Март 03, 2012, 23:18
Это все хорошо конечно , но у нас массив объектов, поэтому нужно проверять в цикле все элементы этого массива, чего не хочется делать, я же писал впринципе className тоже подойдет, только придется тогда проходить по всем элементам массива в цикле и проверять имя каждого на то что мы ищем, вот есть ли варианты без map вытащить по имени класса объект этого типа
Блин, окончательно запутал... Так массив объектов есть, или их надо создавать по имени?
Если массив есть, то юзай мапу вместо массива
Если массива нет, а объекты надо создавать, то юзай совет BRE
вообще подразумевается 2 варианта , что лучше пока не решили , хранить все объекты и через map по имени вытаскивать их, либо создавать не лету , конечно 2 вариант лучше
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...