Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt]вопрос по функции children() 
:(
    Опции темы
yngwie19
Дата 19.6.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравствуйте, помогите разобраться.
Код

QObject *pobj1 = new QObject;
QObject *pobj2 = new QObject(pobj1);
QObject *pobj3 = new QObject(pobj2);

Вот небольшой пример объектной иерархии. Я хочу получить список всех дочерних объектов pobj1. В ассистенте написано что для этого нужно использовать функцию children(), которая возвращает указатель на список QObjectList. Пишу так:
Код

QObjectList *list = pobj1->children();

Получаю ошибку
Код

\main.cpp(17) : error C2440: 'initializing' : cannot convert from 'const QObjectList' to 'QObjectList *'

Почему метод возвращает не указатель (как написано в документации) а сам объект ?


Это сообщение отредактировал(а) yngwie19 - 19.6.2009, 22:32
PM MAIL   Вверх
Любитель
Дата 19.6.2009, 23:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



http://doc.qtsoftware.com/4.5/qobject.html#children - а где тут написано, что должен быть указатель? Константная ссылка.


--------------------
PM MAIL ICQ Skype   Вверх
yngwie19
Дата 19.6.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Вот что говорит Шлее в своей книге:
user posted image

Это его косяк?

Это сообщение отредактировал(а) yngwie19 - 20.6.2009, 00:15
PM MAIL   Вверх
andrew_121
Дата 20.6.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



yngwie19, Опечатка походу.



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yngwie19
Дата 20.6.2009, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



а что означает эта надпись?
Код

QList<QObject*>

PM MAIL   Вверх
andrew_121
Дата 20.6.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



yngwie19, Гм...не ожидал я от тебя такого smile 
QList - шаблонный класс. Параметром для него является QObject*

Добавлено через 44 секунды
Т.е. Он хранит массив указателей на QObject


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yngwie19
Дата 20.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



andrew_121, надо про сишные шаблоны почитать. Спасибо.
PM MAIL   Вверх
mes
Дата 20.6.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(yngwie19 @  20.6.2009,  12:47 Найти цитируемый пост)
про сишные шаблоны

про сипипишные smile 


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 20.6.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



про шаблоны вроде разобрался, тогда такой пример. Нужно по имени объекта найти его в этом примере объектной иерархии, для чего используем функцию: findChild()
Код

pobj1->findChild<QObject*>("имя объекта")

прототип этой функции такой:
Код

T QObject::findChild ( const QString & name = QString() ) const

т.е получается т.к это шаблонная функция не-шаблонного класса то тип Т означает приведение к типу найденного объекта так? а где можно посмотреть реализацию этой функции, а то не очень понятно где еще она в своем теле использует тип Т.

и еще вопрос: Когда в не-шаблонном классе есть шаблонная  функция, то для генерации компилятором необходимого ее варианта, тип нужно обязательно указывать сразу после названия шаблонной функции но до ее аргументов?
Код

findChild<QObject*>("имя объекта")

Это всегда для таких функций или все зависит от ее реализации ?

Это сообщение отредактировал(а) yngwie19 - 20.6.2009, 20:34
PM MAIL   Вверх
SABROG
Дата 20.6.2009, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(yngwie19 @  20.6.2009,  20:29 Найти цитируемый пост)
т.е получается т.к это шаблонная функция не-шаблонного класса то тип Т означает приведение к типу найденного объекта так? а где можно посмотреть реализацию этой функции, а то не очень понятно где еще она в своем теле использует тип Т.

Я не знаю почему, но, когда речь идет о шаблонах - в документации Qt они всегда выглядят как методы, но тем не менее, вызвать их как методы нельзя, т.е. нужно писать object.findChild<classname *>()

Цитата(yngwie19 @  20.6.2009,  20:29 Найти цитируемый пост)
и еще вопрос: Когда в не-шаблонном классе есть шаблонная  функция, то для генерации компилятором необходимого ее варианта, тип нужно обязательно указывать сразу после названия шаблонной функции но до ее аргументов?

Ты можешь опустить имя объекта, но класс объекта опускать нельзя.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 20.6.2009, 21:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(yngwie19 @  20.6.2009,  19:29 Найти цитируемый пост)
и еще вопрос: Когда в не-шаблонном классе есть шаблонная  функция, то для генерации компилятором необходимого ее варианта, тип нужно обязательно указывать сразу после названия шаблонной функции но до ее аргументов?

не так.
Когда тип шаблонных параметров (ш.п.) нельзя вывести из аргументов, то тогда надо указывать тип явно. 
например
Код

template <class T> void  f1(T ); 
template <class T> Т f2(); 

int i=120;
f1(i);  // 1.
f1<int>(i); // 1a.
i=f2<int>(); //2.



1. тип ш. п. выводится из типа переменной i
1a. можно указать явно, но это лишние, так как в данном случае компилятор справится без подсказки.
2. так как, тип ш. п. вывести не возможно, его необходимо указать


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 20.6.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



mes, спасибо тебе большое очень доходчиво обьяснил +1

Это сообщение отредактировал(а) yngwie19 - 20.6.2009, 23:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.