Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Связка сигнал-слот из примера не работает
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
wf778899
Дорвался, наконец-то, до 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
скорее всего, используешь сразу стандартный компилятор, до обработки через moc, который обрабатывает спецсимволы Qt.
wf778899
Цитата(Iron Bug @ 20.7.2014, 12:59) *
скорее всего, используешь сразу стандартный компилятор, до обработки через moc, который обрабатывает спецсимволы Qt.

Всё, разобрался. Класс Counter надо было в хедере объявить, MOC по-другому не понимает...
Litkevich Yuriy
Цитата(wf778899 @ 20.7.2014, 18:09) *
MOC по-другому не понимает..
MOC тут не причём! Он своё дело сделает - h-файл сгенерит. вот только его ты не подключил явно.
его можно после объявления класса подключть.

Когда же ты разделяешь на два файла (h/cpp), то qmake генерит makefile с соответствующим кодом (так сказать за тебя)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.