Приведение типов |
Здравствуйте, гость ( Вход | Регистрация )
Приведение типов |
Creator |
16.10.2009, 0:23
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 7.7.2009 Пользователь №: 881 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как привести указатель на объект класса QTreeWidgetItem к указателю на класс, унаследованному от QTreeWidgetItem?
|
|
|
ViGOur |
16.10.2009, 7:53
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Примерно так:
|
|
|
Tonal |
16.10.2009, 8:15
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Таки лучше dynamic_cast.
Ну или в рукопашную: * определить константу типа MyUserType = QTreeWidgetItem::UserType + 1 * В конструкторе её передать, перед приведением проверять что item.type() == MyUserType * Ну и приводить static_cast-ом - хотя бы от глупых ошибок защитит. |
|
|
ViGOur |
16.10.2009, 8:51
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Tonal, для новичков в программировании аналог reinterpret_cast самое то.
|
|
|
Litkevich Yuriy |
16.10.2009, 9:26
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
А я бы qobject_cast использовал:
|
|
|
Tonal |
16.10.2009, 10:13
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
QTreeWidgetItem не наследник QObject-а, поэтому есть некоторые сомнения в работоспособности qobject_cast для него...
|
|
|
Creator |
16.10.2009, 12:26
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 7.7.2009 Пользователь №: 881 Спасибо сказали: 0 раз(а) Репутация: 0 |
У меня в коде для наследуемого класса был указан макрос Q_OBJECT.
И из-за этого не работали все вышеприведенные методы |
|
|
Tonal |
19.10.2009, 7:23
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
dynamic_cast может не работать только в случае явного отключения rtti, а static_cast и приведение в старом стиле - в случае синтаксической ошибки.
Наличие или отсутствие макроса Q_OBJECT на их вообще не влияет. Какие именно все методы "не работали" и как? Может таки код покажешь? |
|
|
Creator |
19.10.2009, 15:09
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 7.7.2009 Пользователь №: 881 Спасибо сказали: 0 раз(а) Репутация: 0 |
Tst.zip ( 1,07 килобайт )
Кол-во скачиваний: 194
и то же самое main.cpp Раскрывающийся текст
subitem.cpp Раскрывающийся текст
subitem.h Раскрывающийся текст
tst.pro Раскрывающийся текст
|
|
|
kwisp |
19.10.2009, 15:44
Сообщение
#10
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
думается следующее.
надо проверить tree->topLevelItem(0) по-моему там ноль. |
|
|
Текстовая версия | Сейчас: 9.12.2024, 18:08 |