crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> контейнер для указателей, Q
void*
  опции профиля:
сообщение 1.8.2008, 21:06
Сообщение #1


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

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


есть QList<QTreeWidgetItem*>, получаемый с помощью QTreeWidget::selectedItems(). Нужно брать первый элемент контейнера(в нем больше быть и не может) и для работы с ним преобразовать этот элемент в мой тип(TreeItem*, класс унаследованный от QTreeWidgetItem). Вот проблемный участок кода:
QTreeWidgetItem *i = tree->selectedItems().first(); //tree - QTreeWidget
TreeItem *item = qobject_cast<TreeItem*>(i);

но компилятор ругается:
ошибка: нет соответствующей функции для вызова ‘qobject_cast(QTreeWidgetItem*&)’

как с этим бороться? или может для указателей нужно использовать какие-то другие контейнеры, специализированные?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Tonal
  опции профиля:
сообщение 2.8.2008, 8:54
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(void* @ 2.8.2008, 1:06) *
QTreeWidgetItem *i = tree->selectedItems().first(); //tree - QTreeWidget
TreeItem *item = qobject_cast<TreeItem*>(i);

но компилятор ругается:
ошибка: нет соответствующей функции для вызова ‘qobject_cast(QTreeWidgetItem*&)’

как с этим бороться?

Контейнер здесь не причём. Это ошибка из qobject_cast.
Для его правильной работы нужна некоторая метоинформация, которой для твоего класса TreeItem он не имет.
Чтобы исправить, нужно в объявление TreeItem поместить макрос Q_OBJECT.

Есть второй путь - использовать стандартный dynamic_cast и не мучатся. :)

P.S. qobject_cast быс сделан чтобы заменить dynamic_cast который криво работает на некоторых старых компиляторах С++ которые приходится поддерживать тролям. На современных компиляторах смысла в нём нет. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 23:13