Russian Qt Forum

Qt => Общие вопросы => Тема начата: lucky от Февраль 02, 2011, 00:54



Название: Проблемы со слотами
Отправлено: lucky от Февраль 02, 2011, 00:54
Добрый вечер. У меня возникла следующая проблема. Пытался разобраться со сигналами и слотами. Вот код:
Код:
#include <QtGui/QApplication>

class MyClass : public QObject
{
    Q_OBJECT

    private:
        int val;

    public:
        MyClass()
        {
            val = 0;
        }

        int getVal()
        {
            return val;
        }

    public slots:
        void setValue(int value);

    signals:
        void valueChanged(int newValue);
};

void MyClass::setValue(int value)
{
    if (value != val) {
        val = value;
        emit valueChanged(value);
    }
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyClass a, b;
    QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));

    a.setValue(3);
    b.setValue(7);

    return app.exec();
}
При сборке проекта вылетает ошибка: "undefined reference to vtable for MyClass".
Уже пытался удалять make-файлы. Результат 0. Подскажите пожалуйста в чем ошибки.


Название: Re: Проблемы со слотами
Отправлено: Fat-Zer от Февраль 02, 2011, 01:08
а) вынести объявление/опредиление объекта в отдельный хедер/.цпп
б) в !конеце! файла добавить #include <имя_файла>.moc


Название: Re: Проблемы со слотами
Отправлено: lucky от Февраль 02, 2011, 01:19
Fat-Zer большое спасибо. Пункт "а)" помог :). Вынес по отдельным файлам, заработало. Можете подсказать почему именно так по отдельным файлам?


Название: Re: Проблемы со слотами
Отправлено: Fat-Zer от Февраль 02, 2011, 01:34
Это связано с moc'ом, а точнее с тем в как qmake создаёт правила для сборки с помощью оного в мейкфайлах. Подробнее об этом написано в асистенте Using the Meta-Object Compiler (moc).