crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Преобразование указателя
ruzik
  опции профиля:
сообщение 23.6.2011, 17:46
Сообщение #1


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

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

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




Репутация:   0  


Здравствуйте, у меня есть родительский класс, в нем виджет, и в классе того самого виджета я пишу
    RizekColorManager * rcm;
    rcm = qobject_cast<RizekColorManager*>(parent());
    if (rcm)
        rcm->setWindowTitle("asd");

Ошибок не выдает, но и преобразование не происходит, почему?
Заранее спасибо за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 24.6.2011, 7:39
Сообщение #2


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

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

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




Репутация:   6  


Я не компетентен в данном вопросе, мне интересно разобраться.
1 шаг: Вы создаете указатель на класс RizekColorManager
2 шаг: Вы преобразуете указатель на родителя текущего класса к указателю на класс RizekColorManager

так? А можно поинтересоваться а зачем?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 24.6.2011, 8:09
Сообщение #3


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


вроде для qobject_cast надо регить мета типы через qregisterMetaType<>() перед тем как использовать сию конструкцию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 24.6.2011, 8:56
Сообщение #4


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

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

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




Репутация:   6  


нашёл в примерах:
QObject *obj = new QTimer;                                 // QTimer inherits QObject
QTimer *timer = qobject_cast<QTimer *>(obj);     // timer == (QObject *)obj
QAbstractButton *button = qobject_cast<QAbstractButton *>(obj); // button == 0


Вроде еще и то, что приводим, должно быть тогоже класса, что и к чему приводим. В общем:
RizekColorManager * rcm;
rcm = qobject_cast<RizekColorManager*>(parent()); // parent - объект класса RizekColorManager

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 24.6.2011, 13:12
Сообщение #5


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


еще может быть у тебя RizekColorManager не имеет макроса Q_OBJECT

цитата из доки:

Warning: If T isn't declared with the Q_OBJECT macro, this function's return value is undefined.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 24.6.2011, 15:54
Сообщение #6


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

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

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




Репутация:   0  


всем спасибо за помощь, нашел ошибку, компановщик вставляет еще такую вещь как CenralWidget, то есть что бы обратиться к RizekColorManadger надо сделать так:
parent()->parent()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 1.12.2024, 21:20