Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: наследование с Q_OBJECT
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
quarz
Свой класс наследую от класса без Q_OBJECT.
В своем классе определяю Q_OBJECT и пытаюсь вещать сигналы. Получаю следующие ошибки:
Раскрывающийся текст

1>Compiling...
1>graphscaledraw.cpp
1>Compiling...
1>moc_graphscaledraw.cpp
1>.\GeneratedFiles\debug - usermode\moc_graphscaledraw.cpp(42) : error C2039: 'staticMetaObject' : is not a member of 'QwtScaleDraw'
1> C:\qwt-5.2.0\src\qwt_scale_draw.h(30) : see declaration of 'QwtScaleDraw'
1>.\GeneratedFiles\debug - usermode\moc_graphscaledraw.cpp(56) : error C2039: 'qt_metacast' : is not a member of 'QwtScaleDraw'
1> C:\qwt-5.2.0\src\qwt_scale_draw.h(30) : see declaration of 'QwtScaleDraw'
1>.\GeneratedFiles\debug - usermode\moc_graphscaledraw.cpp(61) : error C2039: 'qt_metacall' : is not a member of 'QwtScaleDraw'
1> C:\qwt-5.2.0\src\qwt_scale_draw.h(30) : see declaration of 'QwtScaleDraw'
1>.\GeneratedFiles\debug - usermode\moc_graphscaledraw.cpp(77) : error C2665: 'QMetaObject::activate' : none of the 4 overloads could convert all the argument types
1> c:\qt\4.5.0\include\qtcore\../../src/corelib/kernel/qobjectdefs.h(334): could be 'void QMetaObject::activate(QObject *,int,int,void **)'
1> c:\qt\4.5.0\include\qtcore\../../src/corelib/kernel/qobjectdefs.h(335): or 'void QMetaObject::activate(QObject *,const QMetaObject *,int,void **)'
1> while trying to match the argument list '(DivScaleDraw *const , const QMetaObject *, int, int)'
1>Build log was saved at "file://d:\Исходники\Работа\XIDC\XILab\debug - usermode\BuildLog.htm"
1>XILab - 4 error(s), 0 warning(s)


Вот код:
class DivScaleDraw: public QwtScaleDraw
{
    Q_OBJECT
public:
        .....
signals:
    void firstScaleChanged();
}.


Как я понял компилятор возмущается что в классе-родителе (QwtScaleDraw) нет Q_OBJECT и следовательно в нем нет 'staticMetaObject', 'qt_metacast', и т.д. Если все так, проблема имеет решение?
BRE
Так а где наследование от QObject?
Просто вписать Q_OBJECT не достаточно.
Litkevich Yuriy
Цитата(quarz @ 17.12.2009, 3:14) *
QwtScaleDraw
наследник QwtAbstractScaleDraw.
А QwtAbstractScaleDraw - это самостоятельный класс, у него нет базового класса
sploid
надо так:
class DivScaleDraw: public QObject, public QwtScaleDraw
quarz
Верно, спасибо большое! Ночью соображалка не сработала (( Только потом дошло что надо наследоваться сначала от QObject, а то при попытке
class DivScaleDraw: public QwtScaleDraw, public QObject

ессно возникала ошибка.
Litkevich Yuriy
как же новички любят далеко лазить за тэгом CODEBOX, когда кнопка code ближе
quarz
Цитата(Litkevich Yuriy @ 17.12.2009, 17:17) *
как же новички любят далеко лазить за тэгом CODEBOX, когда кнопка code ближе


Еще бы, когда кнопка CODEBOX намного более заметная ;)
Litkevich Yuriy
Цитата(quarz @ 28.12.2009, 21:25) *
кнопка CODEBOX
такой кнопки вообще нет

Вот кнопка "Код" -

А за codebox, нужно лезть в список "спец. элементы", который доступен только в форме полного ответа.
В форме быстрого ответа этот список отсутствует, а вот кнопка "код" есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.