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