![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
void* |
![]()
Сообщение
#1
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
есть QList<QTreeWidgetItem*>, получаемый с помощью QTreeWidget::selectedItems(). Нужно брать первый элемент контейнера(в нем больше быть и не может) и для работы с ним преобразовать этот элемент в мой тип(TreeItem*, класс унаследованный от QTreeWidgetItem). Вот проблемный участок кода:
но компилятор ругается:
как с этим бороться? или может для указателей нужно использовать какие-то другие контейнеры, специализированные? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#3
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
дак QList<QTreeWidgetItem*> уже из названия видно что это список указателей это я понимаю, ну а как тогда решить мою проблему? кстати изначально было так:
и та же самая ошибка, поэтому ошибка мне кажется где-то здесь - tree->selectedItems().first() Сообщение отредактировал void* - 1.8.2008, 21:20 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#5
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
я-то понимаю, но как с этим можно бороться?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
может я конечно под вечер гоню, но помоему так:
|
|
|
void* |
![]()
Сообщение
#7
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
не. тогда получается
чет я конкретно запутался с этими указателями... вообще-то по идее, ссылка почти тоже самое что указатель, но почему нельзя привести ссылку на базовый класс к указателю на производный - не пойму... Сообщение отредактировал void* - 1.8.2008, 21:38 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а почему бы просто не сделать:
TreeItem *item = tree->currentItem(); |
|
|
Tonal |
![]()
Сообщение
#9
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
но компилятор ругается:
как с этим бороться? Контейнер здесь не причём. Это ошибка из qobject_cast. Для его правильной работы нужна некоторая метоинформация, которой для твоего класса TreeItem он не имет. Чтобы исправить, нужно в объявление TreeItem поместить макрос Q_OBJECT. Есть второй путь - использовать стандартный dynamic_cast и не мучатся. ![]() P.S. qobject_cast быс сделан чтобы заменить dynamic_cast который криво работает на некоторых старых компиляторах С++ которые приходится поддерживать тролям. На современных компиляторах смысла в нём нет. ![]() |
|
|
Red Devil |
![]()
Сообщение
#10
|
![]() Студент ![]() Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
P.S. qobject_cast быс сделан чтобы заменить dynamic_cast который криво работает на некоторых старых компиляторах С++ которые приходится поддерживать тролям. На современных компиляторах смысла в нём нет. гы-гы. Я могу сказать, что тролли с версии 4.4.0, не то что старые, но и не очень старые компиляторы не поддерживают. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 0:54 |