Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Преобразование указателя

Автор: ruzik 23.6.2011, 17:46

Здравствуйте, у меня есть родительский класс, в нем виджет, и в классе того самого виджета я пишу

    RizekColorManager * rcm;
    rcm = qobject_cast<RizekColorManager*>(parent());
    if (rcm)
        rcm->setWindowTitle("asd");

Ошибок не выдает, но и преобразование не происходит, почему?
Заранее спасибо за помощь!

Автор: silver47 24.6.2011, 7:39

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

так? А можно поинтересоваться а зачем?

Автор: PAFOS 24.6.2011, 8:09

вроде для qobject_cast надо регить мета типы через qregisterMetaType<>() перед тем как использовать сию конструкцию.

Автор: silver47 24.6.2011, 8:56

нашёл в примерах:

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

еще может быть у тебя 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

всем спасибо за помощь, нашел ошибку, компановщик вставляет еще такую вещь как CenralWidget, то есть что бы обратиться к RizekColorManadger надо сделать так:

parent()->parent()

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)