Связка сигнал-слот из примера не работает |
Здравствуйте, гость ( Вход | Регистрация )
Связка сигнал-слот из примера не работает |
wf778899 |
20.7.2014, 13:38
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 20.7.2014 Пользователь №: 4191 Спасибо сказали: 0 раз(а) Репутация: 0 |
Дорвался, наконец-то, до QT-Assistance, решил там посмотреть примеры с использованием сигналов и слотов. Попробовал скомпилировать код ниже (точь в точь из примера) - там простая связка двух объектов, изменение переменной одного объекта шлёт сигнал об изменении в слот второму объекту, в результате чего он пишет в свою переменную значение, переданное с сигналом. Проще некуда и должно работать - только херушки. Пол-дня долбаюсь. Работаю в Qt 5.3.1, при компиляции вылазят ошибки на строчках, лично мною подкрашенных (см. ниже). Текст ошибок по каждой строчке ниже. Кто-нибудь знает, в чём тут проблема. У меня такое чувство, что что-то с настройками проекта - пример же не кем-нибудь набран...
1 #include <QApplication> 2 #include <QObject> 3 class Counter : public QObject{ 4 Q_OBJECT 5 public: 6 Counter() { m_value = 0; } 7 int value() const { return m_value; } 8 public slots: 9 void setValue(int value); 10 signals: 11 void valueChanged(int newValue); 12 private: 13 int m_value; 14 }; 15 16 void Counter::setValue(int value) { 17 if (value != m_value) { 18 m_value = value; 19 emit valueChanged(value); 20 } 21 } 22 23 int main(int argc, char *argv[]) { 24 QApplication app(argc, argv); 25 Counter a, b; 26 QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue); 27 a.setValue(12); // a.value() == 12, b.value() == 12 28 b.setValue(48); // a.value() == 12, b.value() == 48 29 return app.exec(); 30 } Line 19 D:\Projects\QT\qqq\main.cpp:19: ошибка: undefined reference to `Counter::valueChanged(int)' Line 27 D:\Projects\QT\qqq\main.cpp:27: ошибка: undefined reference to `Counter::valueChanged(int)' Line 06 D:\Projects\QT\qqq\main.cpp:6: ошибка: undefined reference to `vtable for Counter' Line 241 C:\Qt\5.3\mingw482_32\include\QtCore\qobject.h:241: ошибка: undefined reference to `Counter::staticMetaObject' Line 03 D:\Projects\QT\qqq\main.cpp:3: ошибка: undefined reference to `vtable for Counter' collect2.exe:-1: ошибка: error: ld returned 1 exit status |
|
|
Iron Bug |
20.7.2014, 14:59
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
скорее всего, используешь сразу стандартный компилятор, до обработки через moc, который обрабатывает спецсимволы Qt.
|
|
|
wf778899 |
20.7.2014, 15:09
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 20.7.2014 Пользователь №: 4191 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Litkevich Yuriy |
21.7.2014, 23:06
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
MOC по-другому не понимает.. MOC тут не причём! Он своё дело сделает - h-файл сгенерит. вот только его ты не подключил явно.его можно после объявления класса подключть. Когда же ты разделяешь на два файла (h/cpp), то qmake генерит makefile с соответствующим кодом (так сказать за тебя) |
|
|
Текстовая версия | Сейчас: 30.4.2024, 4:03 |